AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
シーケンシャルファイルBASIC(18)
例えば学校の成績処理データをディスクに保管・再利用したりする際に使われるのがファイルです。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"」と書き込まれますので、
INPUT #1,DAT$
で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
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.