ファイル操作と変数表


17.ファイル操作
100 rem test-open 97.5.3
110 open "test-open" for input as #1
120 input #1,a$
130 b$ = a$+"xxxx"
140 print a$,b$
150 input #1,a,b,c
160 print a,b,c,a+b
170 open "test-open2" for output as #2
180 print #2,a$,b$
190 print #2,a,b,c,a+b
200 close #2
210 close #1
220 end
解説)
ファイル操作の実験のプログラムです。ファイルを開き、その中のデーターを
読み取り、さらに別のファイルにデーターを書き出します。シーケンシャル・
ファイルになります。test-0penと言うファイルを同じフォルダに作って下
さい。中身は、文字,数字,数字,数字でしたら何でもよいのですが、私は、先ほ
どのファイルの中身を次のようにしています。
110 rem word$(pop1,pop2)
12,2,55
また、このプログラムを実行したら同じフォルダー内にtest-open2と言うフ
ァイルができます。
BASICでよいところは、ファイルや文字の操作が楽な点です。

18.変数表
100 rem Hensuu Sagashi 990604
110 rem word$(pop1,pop2)
120 dim yoyaku$(50),word$(90,20)
130 read nn
140 for i = 1 to nn
150   read yoyaku$(i)
160 next i
170 pop1 = 1
180 namae$ = "test-open.bas"
190 open namae$ for input as #1
200 if eof(#1) <> 0 then goto 400
210 input #1,a$
220 if a$ = "" then 400
230 print "a$= ";a$
240 rem
250 l = len(a$)
260 rem print "l=";l
270 pop2 = 2 : j = 1
280 box$ = mid$(a$,j,1)
290 j = j+1
300 if box$ = " " then goto 310 :  else mbox$ = mbox$+box$ : goto 280
310 word$(pop1,1) = mbox$ : mbox$ = "" : rem print word$(pop1,1):rem Gyou_bangou
320 box$ = mid$(a$,j,1)
330 j = j+1 : rem print "j=";j
340 if box$ = chr$(34) then 360
350 if box$ = " " or box$ = "+" or box$ = "=" or box$ = "*" or box$ = "-" or box$ = "/" or box$ = "(" or box$ = ")" or box$ = "," or box$ = ":" or box$ = ";" or box$ = "<" or box$ = ">" then goto 360 :  else mbox$ = mbox$+box$ : if j <= l then goto 320
360 gosub 490 : rem yoyakugo hantei
370 if flag = 1 then word$(pop1,pop2) = mbox$ : pop2 = pop2+1
380 mbox$ = ""
390 if j <= l then goto 320 :  else pop1 = pop1+1 : goto 200
400 for i = 1 to pop1
410 print i;
420  for j = 1 to 10
430   print "  ";word$(i,j);
440  next j
450 print
460 next i
470 close #1
480 end
490 rem yoyakugo hantei
500 flag = 0
510 if mbox$ = "" or mbox$ = " " then goto 570
520 if mid$(mbox$,1,1) > chr$(47) and mid$(mbox$,1,1) < chr$(58) then 570
530 for i = 1 to nn
540   if mbox$ = yoyaku$(i) then goto 570
550 next i
560   flag = 1 : rem print pop1,pop2,mbox$ : return
570 return
580 rem data
590 data 34
600 data "print","end","stop","for","if"
610 data "next","goto","to","read","data"
620 data "input","inkey$","return","and","or"
630 data "then","else","while","until","do"
640 data "mat","dim","to","open","close"
650 data "as","gosub","rnd","timer","randomize"
660 data "mod","int","exp","abs"
解説)
どの行にどんな変数が表れるかを打ち出すプログラムです。少し長くなると、
自分でもどんな変数をどこに使ったのか分からなくなります。実際、私も分
からなくなりましたので、そのためのツールとして作りました。予約語は除
くようにしています。ただ、remだけは、行中にあった方が読みやすいので
はずしていません。また、予約後は全部は登録していません。私が普段使っ
ているものだけ登録しています。data文に足して行けば幾らでも増やせます。
足した時は、590行目のdataの数(34)を増やして下さい。また、変数表を
作りたいプログラム(ファイル)の名前は、180行目のnamae$を変えて下さ
い。test-open.basと言うのは、この前のプログラムの名前をこうつけてい
たためです。


戻る