内部形式ファイル ☆
1.内部形式について
INPUT文で読める形式で保存するためにはプログラムの細工が必要になるが,内部形式ファイルでは書き出し命令(write文)が読み込み命令(read文)に対応しているので,細工が不要になる。計算の途中結果など,作業途中のデータを一時的にファイルに保存し,後刻,読み込んで使うときは内部形式ファイルを使うとよい。
2.open文
内部形式ファイルを用いる場合は,次のいずれかの形式でopen文を書く。
OPEN #経路番号 NAME ファイル名 ,RECTYPE INTERNAL
OPEN #経路番号 NAME ファイル名 ,ACCESS OUTIN ,RECTYPE INTERNAL
OPEN #経路番号 NAME ファイル名 ,ACCESS INPUT ,RECTYPE INTERNAL
OPEN #経路番号 NAME ファイル名 ,ACCESS OUTPUT ,RECTYPE INTERNAL
(ACCESS句を省略した場合はOUTINとなる)
3.write文
ファイルにデータを書き出すときには,print文の代わりにwrite文を用いる。
write文に複数の項目を書くときには,それらをコンマで区切って書く。
(セミコロンを用いたり,末尾にコンマを書くことはできない)
例1
10 OPEN #1: NAME "A:TEST.CSV",RECTYPE INTERNAL
20 ERASE #1
30 WRITE #1: 1/7, "ABC"
40 CLOSE #1
50 END
4 read文
内部形式ファイルを読むときは,input文の代わりにread文を用いる。
例2
10 OPEN #1: NAME "A:TEST.CSV",ACCESS INPUT, RECTYPE INTERNAL
20 READ #1: A,S$
30 PRINT A,S$
40 CLOSE #1
50 END
5.MAT WRITEとMAT READ
内部形式ファイルにMAT WRITE文で書きこむと,そのファイルをMAT READ文で読みこむことができる。
例3 書き出し
10 DIM A(4),B$(2,2)
20 MAT READ A,B$
30 DATA 1,2,3,4,ABC,DEF,HIJ,KLM
40 OPEN #1:NAME "A:MAT.TXT",RECTYPE INTERNAL
50 ERASE #1
60 MAT WRITE #1: A,B$
70 CLOSE #1
80 END
例4 読み込み
10 DIM A(4),B$(2,2)
20 OPEN #1:NAME "A:MAT.TXT",RECTYPE INTERNAL
30 MAT READ #1: A,B$
40 CLOSE #1
50 MAT PRINT A,B$
60 END
要素数を可変にしたいときは次のようにする。
例5 書き出し
10 DIM A(100)
20 MAT INPUT A(?) ! Aの大きさが変化する
30 OPEN #1:NAME "A:MAT.TXT",RECTYPE INTERNAL
40 ERASE #1
50 WRITE #1:UBOUND(A) ! 要素数を記録する
60 MAT WRITE #1:A
70 CLOSE #1
80 END
例6 読み込み
10 DIM A(100)
20 OPEN #1:NAME "A:MAT.TXT",RECTYPE INTERNAL
30 READ #1:N ! 要素数
40 MAT READ #1:A(N) ! 配列の大きさを変えてから読む
50 CLOSE #1
60 MAT PRINT A
70 END
<Note>
本BASICで用いる内部形式ファイルは,表計算ソフトなどで用いられるコンマ区切り形式(CSV)を採用している。
数値は,文字で表現する。E表現を用いることもある。
文字列は,前後を引用符で囲む。
文字列自身に引用符を含むときは,引用符を二重にする。
1個の記録中のデータはコンマで区切る。
記録末は,復帰(CR)改行(LF) で表す。
たとえば,例1のプログラムを実行すると,A:TEST.CSVの中身は
.142857142857143 ,"ABC"
となる(末尾に復帰文字と改行文字が続く)。
拡張子を.CSVにしておけば,たいていの場合,表計算ソフトでそのまま読み込める。
MAT WRITE文は全要素をコンマで区切って書き込む。たとえば,
100 DIM a(3,2),b$(3)
110 DATA 1,2,3,4,5,6,a,b,c
120 MAT READ a
130 MAT READ b$
140 OPEN #1: NAME "a:sequent.txt", RECTYPE INTERNAL
150 ERASE #1
160 MAT WRITE #1:a
170 MAT WRITE #1:b$
180 CLOSE #1
190 END
を実行すると,a:sequent.txtの中身は
1 , 2 , 3 , 4 , 5 , 6
"a","b","c"
になる。