ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 19:39

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
 記事の件名: Print#,Input#の仕様?
投稿記事Posted: 2007年3月18日(日) 00:12 
オフライン

登録日時: 2007年2月11日(日) 01:52
記事: 36
お住まい: HYOGO pref.
「Open ファイル名 As #番号」のオールアクセスで
事前にFor Output As #番号で作成したファイルを開き、
直後にWrite #またはPrint #を使って値を書き込むと、ファイルの構造がおかしくなります。

具体的に言うと、
Print #0  なら 30 0D 0A で書き込んだ箇所が30 0D 0A 0Aに
Print #0,  なら  30 09 0D 0A で書き込んだ箇所が30 09 0D 0A 0Aに
Print #0,;  なら  30 09で書き込んだ箇所が30 09 09に
こんな感じで、出力した文字の後ろの区切りコードがダブってしまいます。

Print #0,;の場合ならタブが増えるだけなので実害は無いのですが、改行の場合は正しく読み込むことができません。
色々試してみたのですが、ファイルの終端に0Aがくっついてしまうケースもありました。
自分で手直ししようと思って
basic\command.sbpを参照してみましたが、どこで改行を追加しているのかがよく分かりませんでした。


通報する
ページトップ
投稿記事Posted: 2007年3月18日(日) 13:03 
> 「Open ファイル名 As #番号」のオールアクセスで
> 事前にFor Output As #番号で作成したファイルを開き、
> 直後にWrite #またはPrint #を使って値を書き込むと、ファイルの構造がおかしくなります。
> basic\command.sbpを参照してみましたが、どこで改行を追加しているのかがよく分かりませんでした。
イマイチ、どういう状況で生じたかわかりにくいので外しているかもしれませんが。。。。

そもそも、N88BASIC(など)では、オールアクセスとして解説されていません。
これって、ランダムファイルのオープン命令として解説されています。
ランダムファイルはオールアクセスには違いないから、間違っているとはいえないけど、
非常に紛らわしい表現です。

オールアクセスで開いてシーケンシャル書きした場合、
書いた範囲「だけ」新しいデータとなり、それ以降は古いデータのまま残る(バイト単位で。)ため、
通常、書いた範囲の最後と、前のデータの境界が整合しません。
したがって、普通は、オールアクセスでオープンしません。
(元ファイルのレコード長を把握していて、かつ、データ書き込み後もレコード長が以前と同じ
 という、超レアケースの場合のみオールアクセス使用可能。)
超レアケースを除けば、
新規書き込み(For Output As #...) ※書き込んだデータより後ろは消えてしまう  または
追加書き込み(For Append As #...) ※既存データの後ろに書く。
のどちらかで開けるしかないです。
ですので、事実上、
・オールアクセスで開いてシーケンシャル書きはできない(データが壊れる)
 シーケンシャル1ファイルを読むのと書くのを同時に行うのはもってのほか(読んだファイルと別のファイルに書き出す必要あり)
と考えて間違いないです。


通報する
ページトップ
   
投稿記事Posted: 2007年3月18日(日) 19:36 
オフライン

登録日時: 2007年2月11日(日) 01:52
記事: 36
お住まい: HYOGO pref.
仰るとおり、私がオープンしているのはシーケンシャルファイルです。
書くのを忘れていたのですが、
ファイルの先頭に保存しているのはBOOL値の文字列化した物(実際にはそのまま指定している)なので、
-1 -> 0 で文字数が減ったから不具合が出ているのかもしれません。
…よく考えたらそれしか考えられませんね。

バグといってすみませんでした。
でも、一体どこで改行を書き込んでいるのでしょうか?


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[10人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean