こんにちは。
掲示板をperlで作るという課題に取り組んでいるのですが、下記の部分の
動きだけがどうしても期待する動作がえられず、困っています。
なにか試した方が良い事がありましたら、ご指摘いただけないでしょうか。
プログラムの説明:
POST されたコメントを data.dat に追記していくプログラムです。
ファイルハンドラから一行づつ読み込んで、行数を $count でカウントし、
『X行目&&コメント』のようにコメントの先頭に行数を表示します。
#!/usr/bin/perl
$myfile = 'data.dat';
(省略)
sub piyo{
open(HOGE, ">> $myfile");
flock(HOGE, 2);
my $count = 1;
while(<HOGE>){
$count++;
};
print HOGE "$count行目&&in{'comment'}\n";
close(HOGE);
};
data.dat の期待する結果は下記です。
1行目&&コメント
2行目&&コメント
3行目&&コメント
.....
実際に data.dat に書き込まれた結果は下記でした。
1行目&&コメント
1行目&&コメント
1行目&&コメント
.....
試した事1:
open(HOGE, ">> $myfile");
を
open(HOGE, "+>> $myfile");
した。
試した事2:
while(<HOGE>){
$count = $count + 1;
};
とした。
どちらでも結果に違いがありませんでした。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
+>>をご使用なので、ファイルハンドラが最後に移動してないでしょうか。
ハンドラが最後に移動しているので、whileは実行されておらず、常にファイル末尾に1行目が出力されるというシナリオを想像します。
Perlfaqを使用して…
$lines = 0;
$filename = "yahho.txt";
open(FILE, "+<$filename") or die "Can't open `$filename': $!"; #open に+<を使用
while (sysread FILE, $buffer, 4096) {
$lines += ($buffer =~ tr/\n//);
print "p";
}
print FILE ++$lines . "やっほ~\n";
注意 open時にファイルの存在は保証してください。存在しない場合エラーです。
No.3
- 回答日時:
当該Perlfaqは以下のURLです。
http://perldoc.jp/docs/perl/5.14.1/perlfaq5.pod
「あるファイルの行数を数えるには」 が該当します。
数えた後はファイルハンドラは終端になっているのでご希望の処理を追加するようにしています。
こういったサイトをまず最初に確認すべきなのですね。
教えていただきありがとうございます、次回からまずは perldoc から情報を探してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) Sheet1の出荷日と品名が並んだ表からSheet2の品名別出荷日別の個数一覧表を作っています。 オ 3 2022/12/01 23:54
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- PHP PHP ページング データベース 1 2022/06/16 10:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
close()で例外が投げられる理由
-
cgiの投票回数制限設定について...
-
telnet接続
-
perlのflock関数でロックをかけ...
-
VBAでCSVファイルを途中行まで...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルの特定行を書...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
バッチファイルの作り方(CSV→...
-
csvファイルの横方向への改行に...
-
ExcelをCSV書き出す場合のシー...
-
drtファイルはどうしたら開...
-
無料配布の郵便番号自動入力cgi...
-
ファイルからある文字列の個数...
-
Perlで フォルダ内の全て...
-
Perl 特定のフォルダ以外削除
-
JSP URLに表示される拡張子 .jsp
-
csv出力
-
MATLABのm-fileについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
perlのflock関数でロックをかけ...
-
改行コードが勝手に
-
巨大ファイルの行をを逆順に並...
-
オープンしたファイルで行の連結
-
Perl で syntax error
-
where can I buy snowbord in t...
-
perlを用いた特定文字列間の抽...
-
Perlで他サイトの情報を取得し...
-
open中のファイルをrename
-
die関数のエラー出力先について
-
ハッシュにファイルハンドル
-
perlで大容量CSVのsort方法につ...
-
テキストファイルの本文中に行...
-
サブスクリプトとのファイルハ...
-
AutoCADのスクリプト
-
フォルダが開かなくなりました。
-
ジョブショップスケジューリング
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
おすすめ情報