- ベストアンサー
行数でなく内容を取得するには
70<>9<>1日目<>3<>業務の流れについての概説<> こういった中身のtest.txtがあります。 open(READ_FILE,"<test.txt"); @file = <READ_FILE>; @data = split(/<>/,@file); close(READ_FILE); open(WRITE_FILE, ">test02.txt"); print WRITE_FILE "@data"; close(WRITE_FILE); このようにすれば、test2.txtは、次のようになると思ったのですが、 70 9 1日目pm 3 新薬開発の流れについての概説 行数を表示しているようで、「1」となります。 (ためしにtest.txtの行を増やしたらその行数を反映していました) どこが間違っているのかお教えいただけますでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
splitの処理対象の引数に配列を与えることはできないので @data = split(/<>/,@file); ↓ @data = split(/<>/,$file[0]); とするべきです。 また、複数行を処理するならそれなりの処理をする必要があります。
その他の回答 (2)
- omni2
- ベストアンサー率53% (33/62)
11行目間違えてました。すみません。 これでいけるとおもいます。 #!/Perl/bin/perl my @file; my @data; my $x; my $format; if(open(READ,"< test.txt")){ @file = <READ>; close(READ); if(open(WRITE,"> test2.txt")){ foreach $x(@file){ @data = split(/<>/,$x); $format = join(" ",@data); print WRITE $format; } close(WRITE); } } ご迷惑をおかけしました。
お礼
わざわざ直してくださって、ありがとうございます。 今度は意図通りに表示ができました。 勉強していて疑問に感じた部分を質問させていただきましたので、申し訳ありませんが、最初にお答えいただいた方を「良回答」にさせていただきます。 今後ともよろしくお願いいたします。
- omni2
- ベストアンサー率53% (33/62)
#!/Perl/bin/perl my @file; my @data; my $x; my $format; if(open(READ,"< test.txt")){ @file = <READ>; close(READ); if(open(WRITE,"> test2.txt")){ foreach $x(@file){ @$data = split(/<>/,$x); $format = join(" ",@data); print WRITE $format; } close(WRITE); } } こういう感じでいかがでしょうか?
お礼
ありがとうございます。 そのまんま試してみましたが、うまく動いてくれませんでした。 myの意味もよくわからない初心者ですので、もう少し勉強してから再度検討させていただきたいと思います。 どうもありがとうございました。
お礼
ありがとうございます。その通りにしたらできました。 まだ勉強を始めたばかりで右も左もわかりませんでしたが、参考URLがすばらしいです。 しっかり勉強して、今度はもう少し高度な質問ができるようにしたいと思います。 本当にありがとうございました。