バイナリファイルの利用

(仮称)十進BASICでは,CHARACTER INPUT文を利用してファイルをバイト単位で読むことが可能です。
ファイルと文字列をバイト単位で扱うため,各プログラム単位の先頭に
OPTION CHARACTER BYTE
を書いておきます。そうすると,CHR$関数とORD関数とで文字と数値との相互変換が可能になります。
データをバイト単位で書き込みたい場合には,
PRINT s$;
のように,末尾にセミコロンを書いたPRINT文が使えます。
例1 次のプログラムは,ファイルを複製します。

100 OPTION CHARACTER BYTE
110 LET infile$="C:\BASICw32\TUTORIAL.PDF"
120 LET outfile$="C:\BASICw32\COPY-TUTORIAL.PDF"
130 OPEN #1:NAME infile$
140 OPEN #2:NAME outfile$ 
150 ERASE #2
160 DO
170    CHARACTER INPUT #1,IF MISSING THEN EXIT DO: s$
180    PRINT #2:s$;
190 LOOP
200 CLOSE #1
210 CLOSE #2
220 END

ファイル全体を読み込む

ファイル全体を読み込むのに十分なだけのメモリーがあれば,ファイル全体を1個の文字列変数に読み込んで処理することが可能です。
例2

100 OPTION CHARACTER BYTE
110 LET infile$="C:\BASICw32\TUTORIAL.PDF"
120 LET outfile$="C:\BASICw32\COPY-TUTORIAL.PDF"
130 OPEN #1:NAME infile$
140 ASK #1: FILESIZE n
150 LET s$=""
160 FOR i=1 TO n
170    CHARACTER INPUT #1: s$(i:i)
180 NEXT i
190 CLOSE #1
200 ! 通常,ここで何かの処理を行う
210 OPEN #2:NAME outfile$ 
220 ERASE #2
230 PRINT #2:s$;
240 CLOSE #2
250 END

上のプログラムは単にコピーを作成するだけですが,190行と210行の間に行を追加して様々な処理ができます。
(補足)
 ver. 5.8.8では,バイト長を変えないような部分文字列への代入を高速化したので,上のプログラムの150行を,

150 LET s$=REPEAT$(chr$(0),n)

に変えると少し速くなります。


戻る