初歩の初歩、テキストカウンターを作成しようとして

open (CNT,"+<cnt.dat");
$cnt = <CNT>;
close(CNT);
chomp $cnt;
$cnt = $cnt + 1;
print CNT $cnt;
close (CNT);

と上記のようなプログラムを書いたのですが、
ファイルに書き込みがなされません。
多少わかりにくい書き方になるかとは思いましたが、

open (CNT,"<cnt.dat");
$cnt = <CNT>;
close(CNT);
open(CNT,">$cntfile");
chomp $cnt;
$cnt = $cnt + 1;
print CNT $cnt;
close (CNT);

という風に書きかえてみました。
こちらですと、書き込みはされるのですが何故かカウントが
2つずつカウントされてしまうんです。
プログラムとしておかしな点というのが思い当たらずお手上げです。
ご教授下さい、お願いします。

A 回答 (2件)

カウンタを書き出す前にはcloseするのではなく、


seekでファイル操作の位置をリセットしてやります。
-------------------------------------------------------
open(CNT,"+<cnt.dat");
$cnt = <CNT>;
chomp $cnt;
$cnt++;
seek(CNT, 0, 0);# 位置をCNTの先頭に戻す。
print CNT $cnt;
close(CNT);
-------------------------------------------------------
このカウンタの場合は文字列の長さが減らないので大丈夫ですが、
読みこんだものが「aaaaaa」の場合に「bbb」を書きこむと、
「bbbaaa」のように混ざったものが残るので注意。
print CNT "$cnt\n";
のように改行も一緒に出力してやると少し安心かも。
    • good
    • 0
この回答へのお礼

カウントが2つずつアップされてしまうのはどうやら
ブラウザの設定がおかしかったようです。

頂いた注意を元にプログラムを組みましたところ、成功致しました。
ありがとうございました。

お礼日時:2001/01/31 12:49

最初のは、書き込みに使ってるファイルハンドルを先に閉じているので


うまく行ってないきがします。

2つ目のは、 $cntfileが定義されてないのですが、cnt.datに変更して
走らせてみたら、そのまま1づつ増加しましたけど...(?_?;
    • good
    • 0
この回答へのお礼

早々の御回答ありがとうございました。
コピーアンドペーストを調整しようとして
しくじっていました。
プログラムは正しいハズなんだと念じて
原因究明しました結果、成功致しました。
ありがとうございます。

お礼日時:2001/01/31 12:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報