ScriptBasic講座
[最初のアクセスカウンタ]



1.アクセスカウンタの仕組み
アクセスカウンタとは以下のような仕組みになってます。

1.最初のアクセスがあればファイルに1を記録します。
2.二回目以降のアクセスがあればファイルを読み込みます。
3.ファイルに書き込まれた数字に1を足します。これを画面に表示します。
4.この数字をファイルに上書きします。

これがアクセスカウンタの基本的な仕組みです。






2.「最初アクセスカウンタ」のプログラム
空のファイルacdata.txtを作ってください。

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

'入力
open "acdata.txt" for input as 1
line input #1, count
close 1

'+1します
count=count+1

'保存です
open "acdata.txt" for output as 1
print #1,count
close 1

'表示部分です
print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"
print count
print "</body></html>"

1行目はScriptBasicの位置を指します。CGIを書くときのおまじないとでも思ってください。
3行目の'入力は注釈(コメント)です。Basicでは'以降の文字はコメントとして無視されます。何をしているのか書いておけば、
     後でプログラムを見直すときに重宝します。
open "acdata.txt" for input as 1でファイルacdata1.txtを読み込みます。
line input #1, countでファイルから1行取り出しcountに代入します。
close 1でファイルを閉じています。

注意:先にファイルを読み込みますので、acdata.txtは必ず先に作っておいてください。

countの内容(値)が一つ増えます。

open "acdata.txt" for output as 1で上書き用に開きます。
print #1,count 変数countを書き込み
close 1 ファイルを閉じました。

以下は表示部分です。変数countを表示しています。


ファイルを実行してみてください。
更新するとアクセス数が一つずつ増えていくのがわかりますね。

▼参考リンク
ファイルを使おう







3.ファイルがない場合でも動くように・・・
先ほどのプログラムですが、acdata.txtが存在しない場合もプログラムを実行しようとし、
結果としてInternal Server Errorが表示されてしまうという問題点があります。ここではそれを直します。

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


IF FILEEXISTS("acdata.txt") THEN 

        '入力
        open "acdata.txt" for input as 1
        line input #1, count
        close 1

        '+1します
        count=count+1
ELSE
        'ファイルが存在しない場合はcountを1にします
        count=1
END IF


'保存です
open "acdata.txt" for output as 1
print #1,count
close 1

'表示部分です
print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"
print count
print "</body></html>"

ファイルacdata.txtが存在すれば、FILEEXISTS()は真(TRUE)を返します。IFは条件式が真の時、THEN以降を実行します。
ですので、ファイルが存在する場合のみファイルを開いて変数countを取得し、変数countに1を足します。
ファイルが存在しなければ、FILEEXISTS()からは偽(FALSE)が返されますので変数countは1となります。
後は、先ほど作ったac1.basと同一です。







4.ファイルopenを一回にまとめる
一度のopen命令で読み込み・書き込みをするにはどうすればよいでしょうか?
なぜ、一つにまとめる必要があるかは次項で説明します。

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

'ファイルを開く
open "acdata.txt" for random as 1

'変数countに読み込み
line input #1, count

count=count+1

'ファイルの現在位置
SEEK #1,0

'書き込み
print #1,count

close 1


'表示部分です
print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"
print count
print "</body></html>"

open "acdata.txt" for random as 1でacdata.txtを開きます。randomは読み込みと書き込み(追記)を同時にする命令です。
                      inputと違い事前にファイルを用意する必要はありません。

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



line input #1, count ここで変数Aに代入します。
次のcount=count+1で1を加算します。
SEEK #1,0で現在位置を指定します。ファイルの位置を先頭に変更しました。こうしないと上書きではなく後ろに追記してしまいます。

SEEK 番号 ,位置
番号:openで指定した番号
位置:(0が先頭)


print #1,countでcountの値を書き込みます。


戻る

ウメ研究所