• ベストアンサー

行数でなく内容を取得するには

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の行を増やしたらその行数を反映していました) どこが間違っているのかお教えいただけますでしょうか。

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

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

splitの処理対象の引数に配列を与えることはできないので @data = split(/<>/,@file); ↓ @data = split(/<>/,$file[0]); とするべきです。 また、複数行を処理するならそれなりの処理をする必要があります。

参考URL:
http://www.rfs.jp/sitebuilder/perl/05/func/split.html
noname#183584
質問者

お礼

ありがとうございます。その通りにしたらできました。 まだ勉強を始めたばかりで右も左もわかりませんでしたが、参考URLがすばらしいです。 しっかり勉強して、今度はもう少し高度な質問ができるようにしたいと思います。 本当にありがとうございました。

その他の回答 (2)

  • omni2
  • ベストアンサー率53% (33/62)
回答No.3

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); } } ご迷惑をおかけしました。

noname#183584
質問者

お礼

わざわざ直してくださって、ありがとうございます。 今度は意図通りに表示ができました。 勉強していて疑問に感じた部分を質問させていただきましたので、申し訳ありませんが、最初にお答えいただいた方を「良回答」にさせていただきます。 今後ともよろしくお願いいたします。

  • omni2
  • ベストアンサー率53% (33/62)
回答No.2

#!/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); } } こういう感じでいかがでしょうか?

noname#183584
質問者

お礼

ありがとうございます。 そのまんま試してみましたが、うまく動いてくれませんでした。 myの意味もよくわからない初心者ですので、もう少し勉強してから再度検討させていただきたいと思います。 どうもありがとうございました。

関連するQ&A