BASIC(OPEN/WRITE/CLOSE)

BASICです。読み込みの次は書き込みです。
サンプルはファイルコピーをするプログラムです。sample.txtをout.txtへコピーします。

cat open-write-close.bas | nl -ba -i10 -v10
takk@deb9:~/tmp$ cat open-write-close.bas | nl -ba -i10 -v10
    10  '$lang: "qb"
    20
    30  open "sample.txt" for input as #1
    40  open "out.txt" for output as #2
    50
    60  do until eof(1)
    70    line input #1, a$
    80    write #2,a$
    90  loop
   100
   110  close #1
   120  close #2
   130
takk@deb9:~/tmp$

結果を見てみましょう。

takk@deb9:~/tmp$ fbc open-write-close.bas
takk@deb9:~/tmp$ ./open-write-close
takk@deb9:~/tmp$ ls
open-write-close  open-write-close.bas  out.txt  sample.txt
takk@deb9:~/tmp$ ls -l
合計 64
-rwxr-xr-x 1 takk takk 52624  9月 18 20:47 open-write-close
-rw-r--r-- 1 takk takk   156  9月 18 20:36 open-write-close.bas
-rw-r--r-- 1 takk takk   332  9月 18 20:47 out.txt
-rw-r--r-- 1 takk takk   292  9月 18 20:05 sample.txt
takk@deb9:~/tmp$

あれ、sample.txtとout.txtのサイズが違います。

diffします。

takk@deb9:~/tmp$ diff *.txt
1,20c1,20
< "1    21      41      61      81"
< "2    22      42      62      82"
< "3    23      43      63      83"
< "4    24      44      64      84"
< "5    25      45      65      85"
< "6    26      46      66      86"
< "7    27      47      67      87"
< "8    28      48      68      88"
< "9    29      49      69      89"
< "10   30      50      70      90"
< "11   31      51      71      91"
< "12   32      52      72      92"
< "13   33      53      73      93"
< "14   34      54      74      94"
< "15   35      55      75      95"
< "16   36      56      76      96"
< "17   37      57      77      97"
< "18   38      58      78      98"
< "19   39      59      79      99"
< "20   40      60      80      100"
---
> 1     21      41      61      81
> 2     22      42      62      82
> 3     23      43      63      83
> 4     24      44      64      84
> 5     25      45      65      85
> 6     26      46      66      86
> 7     27      47      67      87
> 8     28      48      68      88
> 9     29      49      69      89
> 10    30      50      70      90
> 11    31      51      71      91
> 12    32      52      72      92
> 13    33      53      73      93
> 14    34      54      74      94
> 15    35      55      75      95
> 16    36      56      76      96
> 17    37      57      77      97
> 18    38      58      78      98
> 19    39      59      79      99
> 20    40      60      80      100
takk@deb9:~/tmp$

書き込み時に勝手に””が付与されていますね。実はwriteを使うと、区切り文字とクォートが自動で付与されるようになっています。変数を用意して試してみましょう。

cat write.bas | nl -ba -i10 -v10
takk@deb9:~/tmp$ cat write.bas | nl -ba -i10 -v10
    10  '$lang: "qb"
    20
    30  a$ = "HELLO1"
    40  b$ = "HELLO1"
    50  c$ = "HELLO3"
    60
    70  open "out0.txt" for output as #1
    80
    90  write #1,a$,b$,c$
   100
   110  close #1
   120
takk@deb9:~/tmp$

以下が結果です。なんとCSV形式ですね。

takk@deb9:~/tmp$ fbc write.bas
takk@deb9:~/tmp$ ./write
takk@deb9:~/tmp$ cat out0.txt
"HELLO1","HELLO1","HELLO3"
takk@deb9:~/tmp$

ではwriteをprintに変えてもう一度、ファイルコピーをやってみましょう。

cat open-print-close.bas | nl -ba -i10 -v10
takk@deb9:~/tmp$ cat open-print-close.bas | nl -ba -i10 -v10
    10  '$lang: "qb"
    20
    30  open "sample.txt" for input as #1
    40  open "out2.txt" for output as #2
    50
    60  do until eof(1)
    70    line input #1, a$
    80    print #2,a$
    90  loop
   100
   110  close #1
   120  close #2
   130
takk@deb9:~/tmp$

結果です。out2とsample.txtが同じサイズです。今度は一致しました。

takk@deb9:~/tmp$ fbc open-print-close.bas
takk@deb9:~/tmp$ ./open-print-close
takk@deb9:~/tmp$ ls -l *.txt
-rw-r--r-- 1 takk takk 332  9月 18 20:47 out.txt
-rw-r--r-- 1 takk takk 292  9月 18 20:51 out2.txt
-rw-r--r-- 1 takk takk 292  9月 18 20:05 sample.txt
takk@deb9:~/tmp$ diff out2.txt sample.txt
takk@deb9:~/tmp$

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA