• ベストアンサー

改行コードから改行コードまでをスプリットして配列に取り込む方法を教えて

改行コードから改行コードまでをスプリットして配列に取り込む方法を教えてください。 ファイル「sample.txt」の中に 文字列A 文字列B 文字列C 文字列D 文字列E 文字列F 文字列G と書かれていたとします。このファイルを開き、配列@listに @list = 文字列A\r\n文字列B\r\n文字列C\r\n,文字列D\r\n文字列E\r\n,文字列F\r\n文字列G\r\n となるようなコードを教えてください。 要は二重改行コード\r\n\r\nをスプリッタとして複数の行を配列に取り込む方法です。 よろしくお願いします。

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

  • ベストアンサー
  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.5

Windowsの場合、テキストモードだと、\r\n ⇒ \nの自動変換がなされてしまうので、その場合はNo.2さんのコードでopen時に:rawを指定すればいいと思います。 open my $fh, '<:raw', $file or die "$!:$file"; No.2さんのコードでは最後の文字列に二重改行が付いてしまいますが、質問文のように改行を1つだけにしたいならば、 chomp @list; とすればいいと思います。 splitにこだわるならば、 my @list = split /(?<=\r\n)\r\n/, do{ local $/; <$fh> }; でいけると思います。

reglus
質問者

お礼

なるべく簡単に1行で済ませたかったのでsplitしました。 ありがとうございます。

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

まあ, カブっちゃうのはしょうがないですが>#3. 少なくとも Windows なら $/ = ''; で十分ですけどね.

reglus
質問者

お礼

お礼を失念しておりました。 ありがとうございます。

回答No.3

かぶった

reglus
質問者

お礼

そのようですねw

回答No.2

use strict; use warnings; use Data::Dumper; my $file = shift || 'data.txt'; open my $fh, '<', $file or die "$!:$file"; my @list = (); { local $/ = "\x0D\x0A\x0D\x0A"; @list = <$fh> }; close $fh or die "$!:$file"; print Dumper(@list);

reglus
質問者

お礼

お礼を失念しておりました。 ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

$/ を適当に設定すればいいだけのような気がする.

reglus
質問者

お礼

お礼を失念しておりました。 ありがとうございます。

関連するQ&A