-PR-
解決
済み

Perlのファイルオープン時のモードについて。

  • すぐに回答を!
  • 質問No.34459
  • 閲覧数59
  • ありがとう数7
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 63% (7/11)

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

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つずつカウントされてしまうんです。
プログラムとしておかしな点というのが思い当たらずお手上げです。
ご教授下さい、お願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル8

ベストアンサー率 62% (25/40)

カウンタを書き出す前には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";
のように改行も一緒に出力してやると少し安心かも。
お礼コメント
ikariya

お礼率 63% (7/11)

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

頂いた注意を元にプログラムを組みましたところ、成功致しました。
ありがとうございました。
投稿日時 - 2001-01-31 12:49:15
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル11

ベストアンサー率 40% (104/257)

最初のは、書き込みに使ってるファイルハンドルを先に閉じているので うまく行ってないきがします。 2つ目のは、 $cntfileが定義されてないのですが、cnt.datに変更して 走らせてみたら、そのまま1づつ増加しましたけど...(?_?; ...続きを読む
最初のは、書き込みに使ってるファイルハンドルを先に閉じているので
うまく行ってないきがします。

2つ目のは、 $cntfileが定義されてないのですが、cnt.datに変更して
走らせてみたら、そのまま1づつ増加しましたけど...(?_?;
お礼コメント
ikariya

お礼率 63% (7/11)

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


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ