OPEN |
[機能] ファイルをオープンします。
[書式] OPEN "ファイルネーム" FOR 'モード' AS
[#]n
[説明]
モード (大文字でも可)
-シーケンシャルファイル
'input' 入力モード。
'output' 出力モード。
'append' 追記モード 既存のファイルの後ろから追記されます。
-ランダムファイル
'binary' 1byteリード/ライトモード。
[FOR 'モード']の記述を省略した場合も'binary'モードになります。
既に指定ファイルが存在する場合はそのデータを読み込んでからR/Wモードになります。
#n
ファイルナンバーを割り当てます。
このファイルナンバーは1~15まで15個のファイルを開くことができますが
'input'と'output''append'は各自1つづつしか開くことができません。
('binary'のランダムファイルは複数可能です)
"ファイルネーム"には拡張子が必要です。
アクセス権限のない場所にはアクセス出来ません。
参照:ファイルアクセス項目下部にあるデータの区切りについても御覧ください。
[例] ファイルアクセスサンプル
[smp_file.bas]
100 open "file1.txt" for output as #1
110 print #1,"File access."
120
close #1
130 open "file1.txt" for input as
#2
140 line input #2,a$
150 close #2
160 print a$
170 open "file2.dat"
for binary as #1
180 put #1,,65
190 close #1
200 open "file2.dat" for binary as #2
210 get #2,,d
220 close #2
230 print d
参照:ファイルアクセス項目下部にあるデータの区切りについても御覧ください。
CLOSE |
[機能] ファイルを閉じます。
[書式] CLOSE [[#]n][,[#]n]...
[説明]
#n: ファイル番号
ナンバーの指定がない時は全てのファイルを閉じます。
PRINT# |
[機能] シーケンシャルファイルにデータを出力します。
[書式] PRINT #n,データ [|,or;|データ]...
[説明]
#n: ファイル番号 "output"または"append"のファイル
open命令によって開いたファイル番号を指定します。
データは数値型と文字型です。
文末がセミコロン;の時は改行コードは出力されません。
PRINT# USING |
[機能] "書式制御文字列"に従った書式でデータをファイルに出力します。
[書式] PRINT #n,USING "書式制御文字列"; データ
[|;or,|データ...]
[説明]
#n: ファイル番号 "output"または"append"のファイル
"書式制御文字列"の指定方法は PRINT USING命令を参照して下さい。
文末がセミコロン;の時は改行コードは出力されません。
WRITE# |
[機能] シーケンシャルファイルにデータを出力します。
[書式] WRITE #n,データ [|,or;|データ]...
[説明]
#n: ファイル番号 "output"または"append"のファイル
区切りに不要な空白は出力されません。 ','コンマが区切りに出力されます。
文字データはダブルクォーテーション""で囲まれて出力されます。
INPUT# |
[機能] シーケンシャルファイルからデータを読み込み、変数に代入します。
[書式] INPUT #n,変数[$] [,変数[$]] ...
[説明]
#n: ファイル番号 "input"のファイル
データの型と変数の型は一致している必要があります。
LINE INPUT# |
[機能] シーケンシャルファイルから文字データとして読み込み、文字変数に代入します。
[書式] LINE INPUT #n,文字変数
[説明]
#n: ファイル番号 "input"のファイル
INPUT#と違い','コンマは区切りでなく文字として扱い、改行までを一行として読み込みます。
GET |
[機能] ランダムファイルから1バイトデータを読み数値変数へ代入します。
[書式] GET #n,[pos],数値変数
[説明]
#n:
ファイル番号 "read"のファイル
pos: ランダムファイルを読みこむ位置を指定します。
省略時は最初から順に読まれます。
PUT |
[機能] ランダムファイルに1バイトデータを書き込みます。
[書式] PUT #n,[pos],数値データ
[説明]
#n:
ファイル番号 "write"のファイル
pos: ランダムファイルの書きこむ位置を指定します。
省略時は最初から順に書きこまれます。
指定位置が既存ファイルのサイズを超えている場合は自動でサイズが拡張されます。
EOF |
[機能] 指定のファイルが終わりに到達しているかどうか判別します。
[書式] EOF(n)
[説明]
n:
ファイル番号
終わりであるなら真(-1)、そうでなければ偽(0)を返します。
ファイル入出力のテキストデータの区切りについて
print#文、write#文、input#文、line-input#文それぞれの違いと用法。
文字入出力部は以下のように print#,line-input#文(又はinput#文)でよいのですが
print #1,"data1"
input #2,a$
一文で複数のデータをやり取りする際の区切りについて補足します。
仕様は従来のBasicと同じ互換性のあるものとなっています。
やや複雑になっているのでその詳細について説明します。
複数に並んだデータの区切りは
数値データの場合はコンマ[,]、改行[ret]に加えてスペース[ ]も区切りと判別されます。
文字データの場合はコンマ[,]、改行[ret]そして
ダブルクオーテーション["]で囲われている場合はその囲いの終わりも区切りと判別されます。
後にコンマが続く場合はコンマの所までとなります。
文字データはダブルクオーテーションで囲われたもの、囲われてないもの、
どちらも利用可能ですが、囲われたデータを読むと
input#では両端のダブルクオーテーションが除かれた文字データとなります。
(例)元データの記述 "ab" → ab 取得後の文字データ
line
input#ではダブルクオーテーションもコンマもスペースもそのまま文字データとなります。
write#文との書き込みの比較
write #1,"ab","cd","ef"
print
#1,"ab","cd","ef"
この書き込みの例で input#で読み込んだ結果は
write#文の場合
ab
cd
ef
コンマで区切られた3つのデータとなります。
(内部の書き込み状態 "ab","cd","ef")となります。
print#文の場合はコンマが print文と同様にTab空白文字の書式と判断され
ab
cd
ef(内部の書き込み状態もこれと同じ)
余分な空白であけられた1つのデータとなります。
print#文でコンマを区切りとして出力をするには
","のようにコンマをダブルクオーテーションで囲った形で記述します。
print #1,"ab"+","+"cd"+","+"ef"
print #1,"ab,cd,ef"
print
#1,"ab";",";"cd";",";"ef"
これらは同じ結果になります。(3つのデータ)
また print#文で両端の意味のある空白を出力する時は
ダブルクオーテーション["]を意味する文字コード chr$(34) で囲います。
print #1,chr$(34)+" ab "+chr$(34)
"
ab ":出力結果(読み込み時は"は除かれます)
print #1," ab "
ab:出力結果
これらは print#文でデータを書き込んだ時ですが
テキストエディタで記述してデータを与える場合は次のようになります。
テキストファイルの中身
abc (print #1,"abc"
で書いた場合と同じ)
" abc " (print #1,chr$(34)+" abc "+chr$(34)
または write #1," abc " で書いた場合と同じ)
コンマ、セミコロンを文字として出力する時も chr$(34) で囲います。
例えば
print #1," ab , cd "
これは前述のように ab,cd という2つのデータとして出力されますが
print #1,chr$(34)+" ab , cd "+chr$(34) …①
この場合は" ab , cd "というコンマも含む1つの文字データとして扱われます。
注意:①のような chr$(34)
の記述を含む文字の結合式を使う時はcモードで実行して下さい。
iモードでは複数の["]文字により文字の区切りが正常に判別できない時があります。
* write#文ではchr$(34)を記述しなくても文字列は自動で""で囲われて出力されます。
シンプルな文字入出力を行うには
出力は
print#文による1つづつのデータ出力
入力は line input#文での入力(コンマで区切られたデータは
input#文)
というのが一般的な用法になります。
また当Basicでは読み込むテキストデータは print#文で作成したものだけでなく
テキストエディタで作成したものや 取得元が inet$()関数で保存されたものも使用できます。
テキストファイルの読み込みでファイルの末尾に改行のみが続いている場合は
eof()ではヌル文字+改行のデータが残っていると判断されます。
これらに気をつけて読み込み部分を作成して下さい。