アプリ版:「スタンプのみでお礼する」機能のリリースについて

Perlのプログラミングでつまづきました。
# ファイルから指定文字列を含む行を収集する

# 入力ファイルのオープンと読み込み
print( "入力ファイル名?" );
$n = <STDIN>; chomp( $n );
open( FIN, "<$n" ) or die "入力ファイルオープンエラー: $!\n";
$n = @a = <FIN>;
close( FIN );
print( "$n 行読み込みました\n" );

# 行の収集
print( "検索文字列?" );
$x = <STDIN>; chomp( $x );
$ptn = $x; #指定の文字列
$x = @b = grep( /$ptn/, @a );
print( "$x 行見つかりました\n" );

# 出力ファイルのオープンと書き出し
print( "出力ファイル名?" );
$y = <STDIN>; chomp( $y );
open( FOUT, ">$y" ) or die "出力ファイルオープンエラー: $!\n";
print FOUT ( $ptn, "\n" );
print FOUT ( $x, "\n" );
print FOUT ( @b );
close( FOUT );

というプログラムで実行すると
C:\My Perl\pl>perl プログラムの実行.pl
入力ファイル名?sample1.txt
168 行読み込みました
検索文字列?k
45 行見つかりました
出力ファイル名?out3-24.txt
続行するには何かキーを押してください . . .
となり出力ファイルの中身が表示されません。

どこを間違えているのかご指摘いただけないでしょうか?

A 回答 (6件)

No5です。


回答に補足します。
変数の中身を表示したいだけなら。printのFOUTがなければ表示されると思います
    • good
    • 0

出力ファイルの中身を表示させたいのなら、出力ファイルを読み込みモードでオープンして中身を表示させないと出ないと思います。

プログラムでは、書き込みモードでファイルをオープンしてファイルに書き込んでいるだけで、中身を表示するようなものは書かれていません。ので、その出力ファイルを手動で開けば、中にはちゃんと書き込まれた内容があると思います。ので、次に読み込みでファイルを開き、中身を表示させれば中身が出ると思いますよ。
    • good
    • 0

>正しく実行されれば出力ファイル名の下に検索文字列がずらっと表示されるはずです。



「正しく実行されれば」ではなくて「正しくプログラムが書いてあれば」ですね。
どこが間違えてるかは出力ファイルの内容を表示させてるつもりの所をよく観ればわかるんじゃないかな(その場所が存在すればだけど)。
    • good
    • 0

perl には強力なデバッグ機能があります。


$ perl -d スクリプト名
DB<1> n  で一行ずつ実行できます。
デバッグモードでは、変数の中身を見る事が出来ます。
DB<1> x @b
もちろん、「print ("ファイル名?";」の行では、「ファイル名?」と表示してくれます。

さて、あなたが、「出力ファイル名の下に検索文字列がずらっと表示されるはずです。」を
想定している箇所を見つけてなぜ表示されないかを確認しましょう。

参考URL:http://homepage3.nifty.com/hippo2000/perltips/pe …
    • good
    • 0

あなたがどう思っているかなど, コンピュータには関係ありません. あなたがどう「書いた」か, それがすべてです.



で, 出力ファイルの中身を表示するというのはこのプログラムのどこに書かれているのですか?
    • good
    • 0

どこで表示してるの?

この回答への補足

正しく実行されれば出力ファイル名の下に検索文字列がずらっと表示されるはずです。

補足日時:2012/06/21 12:06
    • good
    • 0

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