ScriptBasic講座
[ファイルを使おう]



1.ファイルとは・・・
CGIでも他のプログラムと同様、ファイルとしてデータを記録します。
掲示板の発言記録・アクセスカウンタのアクセス数などはすべてファイルとして記録します。
大規模なものになるとデータベースを使う必要がありますが、普通の掲示板程度ならファイルで十分です。





2.ファイルを読んでみよう
まず、ScriptBasicと同じフォルダ(ディレクトリ)に以下のファイルを作ってください。


-test1.txt-
1234

1234と書いてtxtファイルとして保存してください。
次はプログラムです。

-file1.bas-
#!/usr/bin/scriba

print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"

open "test1.txt" for input as 1
line input #1, a
close 1

print a

print "</body></html>"

▼実行結果
test1.txtの内容が1234の場合
1234


プログラムの解説です。
openはファイルを開く命令です。以下のように使います。

open ファイル名 for モード 番号
 ・モードはinput/output/append/random/binary/soketから選びます。
 ・番号:1〜512の間で決定
 openしたら必ずcloseしなければならないことにご注意下さい。


ファイル名には対象となるファイル名を入力します。今回の場合は"text1.txt"が指定されています。
ファイルからデータを読み取る場合、モードは入力、つまりinputにする必要性があります。
ファイル番号は複数のファイルを同時に開く必要がない場合は常に1で構いません。
ちなみに対象となるファイルが存在しない場合、Internal Server Errorとなります。必ずファイルは事前に作りましょう。


line input #1 aでファイルの1行目の内容を変数aに代入しています。
line input命令はファイルや標準入力から1行文の文字列を読み取る命令です。
この場合は1行しかありませんので、全ての文字(1234)が変数aに入りました。
#1はopenで指定した番号のことです。

close命令でファイルを閉じます。これは忘れないようにしましょう。
close #1の#1もline input命令と同じようにファイルを開いた時に決めた番号です。


同様のプログラムでtext1.txtの内容をabcdに変えてみてください。ちゃんとabcdと表示されましたよね?色々と変更してみてください。
ただし日本語の場合はCGIと同様、テキストファイルもEUCで保存しないと文字化けします。日本語を試す場合はご注意下さい。






3.ファイルに書いてみよう

-file2.bas-
#!/usr/bin/scriba

print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"

open "test2.txt" for output as 1
print #1 "This is Test!"
close 1

print "書き込み成功"
print "</body></html>"

▼実行結果
書き込み成功


このプログラムを実行すると新たにtest2.txtファイルが制作されます。
確認してみてください。それでは解説です。

openはファイルを開く命令ですが、保存する場合もファイルを一度開いて書き込む必要があります。

open ファイル名 for モード 番号
 ・モードはinput/output/append/random/binary/soketから選びます。
 ・番号:1〜512の間で決定
 openしたら必ずcloseしなければならないことにご注意下さい。


書き込みの為のモードはいくつかありますが、今回は上書きしてみます。
読み込み時と違い、ファイルが存在しない場合でも自動でファイルが作られます。

print #1, でファイル書き込み命令となります。 #1,が増えた事以外は通常のprint命令と同じように使えます。
最後にcloseして終わりです。

※UNIX系サーバをお使いの方へ※
UNIXには書き込み権限等があり、少しややこしいです。
このままでもファイルは作れますが、Apahceのnobody権限で制作されてしまい、以後、nobodyでしかファイル
の操作ができなくなってしまいます。事前にパーミッションを666として配置しておくとか、対策をお願いします。
FTPソフトなどからの削除が出来ません。(全ての操作をCGIでする場合は関係ありません)





4.ファイルの追記
先ほどのプログラムは何回、ファイルを書き込もうと上書き保存しか出来ませんでした。
ここでは、上書きではなく、後ろに続く形で追記したいと思います。

-file3.bas-
#!/usr/bin/scriba

print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"

open "test3.txt" for append as 1
print #1 "This is Test!\n"
close 1

print "書き込み成功"
print "</body></html>"

▼実行結果
書き込み成功


保存ファイル名をtext3.txtに変更し、outputをappendに変更し、最後に\nを追加しただけです。
このプログラムを複数回実行して、TeraPadなどLF(\n)形式対応のテキストエディタでtest3.txtを確認してみてください。
print #1 "This is Test!\n"\n改行を表します。

This is Test!
This is Test!

と、This is Test!が上書きされず、下に続く形で記録されているのがわかります。
ここまでの勉強で基本的な一行掲示板やアクセスカウンタが作れます。自力でやってみようという方はぜひ・・・。

戻る

ウメ研究所