(仮称)十進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)
に変えると少し速くなります。