- ベストアンサー
改行コードから改行コードまでをスプリットして配列に取り込む方法を教えて
改行コードから改行コードまでをスプリットして配列に取り込む方法を教えてください。 ファイル「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をスプリッタとして複数の行を配列に取り込む方法です。 よろしくお願いします。
- みんなの回答 (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> }; でいけると思います。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
まあ, カブっちゃうのはしょうがないですが>#3. 少なくとも Windows なら $/ = ''; で十分ですけどね.
お礼
お礼を失念しておりました。 ありがとうございます。
- _--_1l1_1_
- ベストアンサー率67% (102/152)
かぶった
お礼
そのようですねw
- _--_1l1_1_
- ベストアンサー率67% (102/152)
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);
お礼
お礼を失念しておりました。 ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
$/ を適当に設定すればいいだけのような気がする.
お礼
お礼を失念しておりました。 ありがとうございます。
お礼
なるべく簡単に1行で済ませたかったのでsplitしました。 ありがとうございます。