十進BASICの内部形式ファイルはCSVファイルを用いるので,EXCELなどの表計算ソフトとのデータの連携が可能です。
表計算ソフトと連携する場合には,CSVファイルと表計算のセルの対応を知っておく必要があります。
表計算ソフトでは,CSVファイルの1行がシート上の行(横方向)に対応します。
十進BASICでは,CSVファイルの1行と,READ文またはWRITE文の1回の実行とが対応します。
つまり,READ文,WRITE文にコンマで区切って書かれた項目が表計算ソフトの行(横方向)に対応します。
<Note.>
MAT WRITE文は1回の実行で配列中の全要素をCSVファイルの1行に出力します。
また,1回のMAT READ文の実行でよむデータは,すべてコンマで区切られている必要があります(コンマの直後は改行でもよい)。
したがって,MAT WRITE文,MAT READ文は,そのままでは表計算ソフトとの連携には使えないのが普通です。
表計算ソフトで,氏名,住所,体重,身長を管理しているとします。
このデータをAドライブにdata.csvという名前でCSV形式で保存したとき,このデータをBASICで読むのには次のようにします。
100 DIM a$(1000),b$(1000),c(1000),d(1000) 110 OPEN #1:NAME "A:DATA.CSV", ACCESS INPUT , RECTYPE INTERNAL 120 LET n=1 130 DO 140 READ #1,IF MISSING THEN EXIT DO: a$(n),b$(n),c(n),d(n) 150 LET n=n+1 160 LOOP 170 CLOSE #1
100行の配列宣言は,表計算の項目に対応させます。添え字の上限は実際のデータの個数より少なくならないように(多めに)書いておきます。
140行のREAD文には,表計算の項目に対応する添字付き変数を指定します。
170行の実行が終わると,データの件数がnに入り,配列にデータが読みこまれています。
データ全体を配列に読み込むのでなく,行単位で読んで処理したいときは,
110 OPEN #1:NAME "A:DATA.CSV", ACCESS INPUT , RECTYPE INTERNAL 120 DO 130 READ #1,IF MISSING THEN EXIT DO: a$,b$,c,d 140 PRINT a$,b$,c,d 160 LOOP 170 CLOSE #1
のようにすればできます。
BASICで作成したデータを画面に表示する代わりにCSVファイルに書き出したいときは,たとえば,
110 OPEN #1:NAME "A:DATA.CSV", RECTYPE INTERNAL 120 ERASE #1 130 FOR x=0 TO 10 140 WRITE #1: x, SQR(x) 150 NEXT x 160 CLOSE #1 170 END
のように,ファイルを内部形式で開いて,PRINT文の代わりにWRITE文を用いて出力します。得られたファイルを表計算ソフトで読み込むと,第1列(A列)が0から10までとなり,第2列(B列)に対応する平方根の値が入るはずです。
配列a$,b$,c,dの1番めからn番めまでの要素に収納されたデータを表計算ソフトに渡したいときは,次のようにします。
110 OPEN #1:NAME "A:DATA.CSV", RECTYPE INTERNAL 120 ERASE #1 130 FOR i=1 TO n 140 WRITE #1: a$(i),b$(i),c(i),d(i) 150 NEXT i 160 CLOSE #1
このデータを表計算ソフトで読み込んだとき,横方向がA$,B$,C,Dに,縦方向が添字の番号に対応します。
MAT WRITE文を用いる場合は,1回のMAT WRITE文の実行で1行のデータが出力されます。つまり,これは,2次元配列をMAT WRITE文で書き出したCSVファイルを表計算ソフトで読むと,全データが一行(横一列)に読み込まれることを意味します。
2次元配列に入力された行列データを表計算ソフトでもその形に読み込みたいときは,次のいずれかの形で書き込めばよいでしょう。
例1 内部形式ファイルでWRITE文を使う
100 DIM a(2,3) 110 DATA 1,2,3 120 DATA 4,5,6 130 MAT READ a 140 OPEN #1: NAME "a:data.csv", RECTYPE INTERNAL 150 ERASE #1 160 FOR i=1 TO 2 170 WRITE #1:a(i,1),a(i,2),a(i,3) 180 NEXT i 190 CLOSE #1 200 END
例2 テキストファイルで明示的にコンマを書き込む
100 DIM a(2,3) 110 DATA 1,2,3 120 DATA 4,5,6 130 MAT READ a 140 OPEN #1: NAME "a:data.csv" 150 ERASE #1 160 FOR i=1 TO 2 170 FOR j=1 TO 3 180 PRINT #1:a(i,j); 190 IF j<3 THEN PRINT #1:","; ELSE PRINT #1 200 NEXT j 210 NEXT i 220 CLOSE #1 230 END
例3 独自拡張機能の RECTYPE CSV を用いる
100 DIM a(2,3) 110 DATA 1,2,3 120 DATA 4,5,6 130 MAT READ a 140 OPEN #1: NAME "a:data.csv", RECTYPE CSV 150 ERASE #1 160 MAT WRITE #1: a 170 CLOSE #1 180 END
表計算ソフトで書き出したCSV形式の行列データはそのままではMAT READ文では読めません。
あらかじめ,最後の行を除くすべての行の末尾にコンマを付加してやれば,MAT INPUT文やMAT READ文で読めるようになります。
あるいは,例1にならって,次のようにすればよいでしょう。
例4 一行ごとに読む
10 DIM a(2,3) 20 OPEN #1: NAME "a:data.csv" 30 FOR i=1 TO 2 40 INPUT #1:a(i,1),a(i,2),a(i,3) 50 NEXT i 60 CLOSE #1 70 MAT PRINT a 80 END
例5 独自拡張機能の RECTYPE CSV を用いる
10 DIM a(2,3) 20 OPEN #1: NAME "a:data.csv",RECTYPE CSV 30 MAT READ #1:a 40 CLOSE #1 50 MAT PRINT a 60 END