|
例えば学校の成績処理データをディスクに保管・再利用したりする際に使われるのがファイルです。BASICではシーケンシャルファイルとランダムアクセスファイルの2種類があり、前者は、データを一括して上から順番に読み書きするのに利用され、後者は、レコード管理を行うデータベースとして利用されます。この章では、シーケンシャルファイルについて記述します。
ファイルの基本は、
です。
◆OPEN
ファイルをオープンします。
OPEN "ファイル名" FOR INPUT AS #N | 読み込みモード |
OPEN "ファイル名" FOR OUTPUT AS #N | 新規書き込みモード |
OPEN "ファイル名" FOR APPEND AS #N | 追加書き込みモード |
(共用モードの指定もありますがここでは省略します)
ファイル番号は、#1、#2、#3、と付けます。複数のファイルを同時に開ける事ができ、それぞれに別のファイル番号を付けて区別します。同時に13個まで開ける事が出来ますが、通常は、1つ〜3つ程度でしょう。ファイルのコピーをする場合には、読み込み用1つ、書き込み用1つ、で事が足ります。
◆CLOSE
ファイルをクローズします。
CLOSE #1 | #1のファイルをクローズ |
CLOSE #2,#3 | #2と#3のファイルをクローズ |
CLOSE | 全てのファイルをクローズ |
ファイルを扱う場合は最後に必ずクローズをして下さい。
◆INPUT#
ファイルからデータを変数に読み込みます。
INPUT #1,A | #1のファイルから数値データを読み込み変数Aに入れる |
INPUT #1,A,B | #1のファイルから2つの数値データを読み込み変数A・変数Bに入れる |
INPUT #1,C$ | #1のファイルから文字列データを読み込み変数C$に入れる |
数値データの区切り記号は、空白、カンマ(,)、改行コード(CHR$(13))です。文字列データの区切り記号は、カンマ又は改行コードです。
つまり、文字列データとしてカンマを含める事は出来ませんので注意して下さい。
ファイルの内容と、変数の並びはちゃんと対応していないといけません。
◆LINE INPUT#
ファイルから1行単位(255バイト以内)のデータを文字列変数に読み込みます。
LINE INPUT #1,A$ | #1のファイルから1行の文字列データを読み込み変数A$に入れる |
データの区切り記号は、改行コード(CHR$(13)+CHR$(10))です。文字列データ内にカンマを含める事が出来ます。
◆EOF
ファイルが終了したかどうかを取得します。
A=EOF(1) | #1のファイルが終了したかどうかを調べて、終了していたら真(-1)を、まだだったら偽(0)を、変数Aに入れます。 |
例えば、MS-DOSの「TYPE」コマンドのようなサンプルプログラムです。
10 INPUT "ファイル名=",FN$
20 OPEN FN$ FOR INPUT AS #1
30 IF EOF(1) THEN *FINE
40 LINE INPUT #1,A$
50 PRINT A$
60 GOTO 30
70 *FINE
80 CLOSE #1
90 END |
◆PRINT#
ファイルにデータを書き込みます。
PRINT #1,A | 変数Aの数値を、#1のファイルに書き込みます |
PRINT #1,A;B;C | 変数A,B,Cの数値を、#1のファイルに書き込みます。数値の前後には区切り記号となる半角空白が付けられます。 |
PRINT #1,D$;",";E$ | 変数D$,E$の文字列を、#1のファイルに書き込みます。間に","を入れているのは、区切り記号を入れているという意味です。これを入れないと、D$とE$の区切りがなくてくっついてしまいます。 |
なお、文字列内にカンマや半角空白を入れたい場合には、文字列の前後に二重引用符を付けてやります。
100 A$="10 20 ABCD EFGH,I,J,K"
110 PRINT #1,A$ |
とすると、ファイルには「10 20 ABCDE EFGH,I,J,K」と書き込まれて、これを読み込む場合、数値10、数値20、文字列「ABCD EFGH」、文字列「I」、文字列「J」、文字列「K」として読み込まれてしまう事になります。これを文字列「10 20 ABCDE EFGH,I,J,K」として読み込みたい場合には、
100 A$="10 20 ABCD EFGH,I,J,K"
110 PRINT #1,CHR$(34);A$;CHR$(34) |
のようにします。するとファイルには
「"10 20 ABCD EFGH,I,J,K"」と書き込まれますので、
で1つの文字列データとして受け取る事が出来るようになります。
ファイル書き込みで「PRINT #1,A;B;C」として書き込んだファイルは、ファイル読み込みで「INPUT #2,A,B,C」という風に、数値変数で書いたデータは数値変数で読み込む、文字列変数で書いたデータは文字列変数で読み込む、と対応させるようにプログラミングして下さい。
◆PRINT # USING
文字列、数値などのデータを編集し、ファイルに書き込みます。
PRINT #1,USING "###.##";A |
内容は、ファイルに書き込むという事以外は、「PRINT USING」と同じです。
◆WRITE#
ファイルにデータを書き込みます。
WRITE #1,A | 変数Aの数値を、#1のファイルに書き込みます |
WRITE #1,A,B,C
WRITE #1,A;B;C | 変数A,B,Cの数値を、#1のファイルに書き込みます。数値と数値の間の区切り記号としてカンマ(,)が付けられます。 |
WRITE #1,D$,E$
WRITE #1,D$;E$ | 変数D$,E$の文字列を、#1のファイルに書き込みます。文字列の前後には二重引用符(")が付けられ、文字列と文字列の間の区切り記号としてカンマ(,)が付けられます。 |
PRINT#と少し似ていますが、WRITE#は数値書き込みの際に余分な空白は付きません。セミコロン(;)とカンマ(,)は同じ意味となります。1行の最後には改行コード(CHR$(13)+CHR$(10))を書き込みます。
例えば、MS-DOSの「COPY」コマンドのようなサンプルプログラムです。(テキストファイルのみ対応です)
10 INPUT "コピー元ファイル名=",F1$
20 INPUT "コピー先ファイル名=",F2$
30 OPEN F1$ FOR INPUT AS #1
40 OPEN F2$ FOR OUTPUT AS #2
50 IF EOF(1) THEN *FINE
60 LINE INPUT #1,A$
70 PRINT #2,A$
80 GOTO 50
90 *FINE
100 CLOSE
110 END |
(1行255文字までです。長い行がある場合にはうまく行きません。)
なお、RS-232C接続の通信プログラムを作成する場合も、「OPEN」命令、データ読み込み、書き込み、「CLOSE」命令、を使って、相手機器との通信を行います。例えば、2台のパソコンをRS-232Cで接続してデータのやり取りをするプログラムや、RS-232C接続のプロッタ出力プログラム、RS-232C接続でのロボット制御プログラム、などを作る事が出来ます。プリンタケーブル接続でのプリンタ/プロッタ出力プログラムを作る事も出来ますが、プリンタケーブル接続の場合は、「LPRINT」で作成する方が安定します。
RS-232Cでのオープンは、「OPEN "COM:" AS #1」のようにします。この場合は、#1でINPUT #もPRINT #も一緒に使えます。例えばプロッタ接続している場合には、PRINT#でプロッタにデータを送信し、INPUT#でプロッタからの情報を受信します。最後はやはり「CLOSE #1」のように行います。通信設定を行う事も出来ますが(ボーレート以外)、少しややこしいのでここでは省略します。 |
|
バッチファイル
BASIC
1 2 3 4 5
6 7 8 9 A
B C D E F
G H I J
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
|