• ベストアンサー

ファイル操作

ファイル操作について、プログラムがうまくできないので教えていただきたいです。 作っているのは、txtファイルを読み込んで、置換の処理をした結果を、test.txtファイルに書き出したいのです。 質問なのですが、ここでtest.txtはあらかじめ作成しておかなければならないのでしょうか。自動で作成させる方法があれば、教えてください。 -----------------data.txt------------------------ rabbitうさぎappleりんごcoffeeコーヒー ------------------------------------------------ -----------------apple.pl----------------------- open(FILEHANDLE,"data.txt"); while($str=<FILEHANDLE>){ $str=~s/apple/青りんご/; } close(FILEHANDLE); open(FILEHANDLE,"test.txt"); print FILEHANDLE $str; close(FILEHANDLE); ------------------------------------------------- また、コマンドプロンプトの結果は次のとおりです。 C:\Perl>perl -cw apple.pl apple.pl syntax OK C:\Perl>perl apple.pl C:\Perl> Perl初心者なため、詳しく教えていただけると助かります。よろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>入れ子(?)のようにするのはどうしてなのですか。 入れ子のようにするのは、 サンプルのような場合、別にどっちを先にクローズしても良いので、入れ子になっている必要はないのですが、 例えば、 入力ファイルが開けない場合、 出力ファイルは、準備する必要がないですよね。 そのように、依存関係がある場合、依存しているモノの内側で(つまり依存しているモノが存在している範囲で)処理すべきだと言う場合があります。 なので、普段から特別そういう入れ子にする必要が無いような場合でもそういうように書いておくと、 プログラムを書く人(私)が安心できます。 まあ、慣習のようなものですね。

mighty5
質問者

お礼

お礼が遅くなって申し訳ありません。 勉強になりました。 どうもありがとうございました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

open(IN,"<data.txt"); open(OUT,">test.txt"); while(<IN>){ s/apple/青りんご/; print OUT; } close(OUT); close(IN); # でいいと思います。 出力ファイルはあらかじめ作って置かなくてもいいです。

mighty5
質問者

お礼

早速、回答いただきましてありがとうございます。 そして上記のプログラムにしてみたところ、うまくいきました。ありがとうございます! そこで質問なのですが、 open(IN,"<data.txt"); open(OUT,">test.txt");   :   :   : close(OUT); close(IN); というように、入れ子(?)のようにするのはどうしてなのですか。 教えていただけると嬉しいです。どうぞよろしくお願いします。

回答No.2

補足です。 書き込み用、読み書き用、追加用でopenした場合、ファイルがなければ勝手に作られます。

回答No.1

このあたりの説明で分かるでしょうか。 http://www5a.biglobe.ne.jp/~n_rieko/perl/7.htm

mighty5
質問者

お礼

早速、回答いただきましてありがとうございます。 実は、紹介してくださったサイトを見ながら、上記の プログラムを作っていました。 作ったプログラムだと、test.txtが自動生成していません…。プログラムのどこがおかしいのでしょうか。 補足もありがとうございました。

関連するQ&A