- ベストアンサー
改行コードから改行コードまでをスプリットして配列に取り込む方法を教えて
改行コードから改行コードまでをスプリットして配列に取り込む方法を教えてください。 ファイル「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をスプリッタとして複数の行を配列に取り込む方法です。 よろしくお願いします。
- reglus
- お礼率95% (59/62)
- Perl
- 回答数5
- ありがとう数15
- みんなの回答 (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)
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);
お礼
お礼を失念しておりました。 ありがとうございます。
関連するQ&A
- アクセスでのインポート時の改行について
現在テキストデータで 文字列A〈tab〉文字列B〈tab〉文字列C〈tab〉文字列D〈改行〉 文字列E〈tab〉文字列F〈tab〉文字列G〈改行〉 : : というファイルがあります。 これをアクセスにインポートするときに、 文字列A 文字列B 文字列C 文字列D 文字列E 文字列F 文字列G : : ※文字列B・C・DおよびF・Gはそれぞれひとつのセル内改行です。 という形でインポートすることは可能でしょうか? もちろんインポートのときでなくても後の加工でこの形になればそれでもいいのですが、いかんせん数が多いのですべてを手入力するのは不可能なのです。 一行あたりの文字列の数は上の例のように4つだったり、3つだったりするのですが、セル内改行にしなければいけないのは左から2つめ以降のセルだけです。 どなたか教えていただけませんでしょうか?
- ベストアンサー
- オフィス系ソフト
- 無名配列をsplitする方法
データベースから吐き出した数百行のデータがあります。それを無名配列に入れているのですが、 1)1列目の一行目を変数に格納したい。 2)7行目を全部足して、その結果を変数に格納したい。 コードが会社にあるため、十分に説明できなければすみません。 一部分でもヒントがございましたら教えてくださいまし。 eval column bind{} #dbh 処理完了 while sth hashref_array() { #無名配列へ格納 my $z = $a->[3]; #一行前のデータを使用 my $b = $z / 12; my $c = $a->[4]; my $d = ($z / $c)**0.38888888; $a=[$x, $b, $c, $d, $e, $f, $g]; }
- 締切済み
- Perl
- 改行コードについて
改行コードがよく解らないので説明お願いします 様々なサイトの改行コードの説明で LinuxはLF MacはCR WindowsはCRLFと説明しています 私の認識では LF=\n CR=\r CRLF=\r\n だと思っていました ここで疑問なのですが 確かに私の利用した環境ではLinuxの改行コードは\n, Windwosの改行コードは\r\nでした ところがMacの標準のメモ帳(テキストエディット)で文字を入力しても改行コードは\nです 確認方法は od -cというコマンドとfileというコマンドです これはつまりCRではなくLFということですよね? では、なぜ多くのサイトではMacはCRと説明しているのでしょうか? そもそもCR=\rという認識が間違ってるのでしょうか? よろしくお願いします
- 締切済み
- その他([技術者向] コンピューター)
- 配列から別の配列の要素を削除する方法
ある配列array_aに、100件の文字列要素が格納されています。 別の配列array_bには、80件の文字列要素が格納されています。 array_aの要素、array_bの要素共に重複するものはありません。 array_b中に存在する要素はすべてarray_a中にも存在します。 array_aにあり、array_bにはない要素で構成されたarray_cの作り方を教えてください。 例えば $array_a=array("a","b","c","d","e","f","g"); $array_b=array("e","b","d"); なら、 $array_c=array("a","c","f","g") になります。 配列array_aとarray_bは、 $array_b=array("b","b","d"); であったり、 $array_a=array("a","a","b","c","d","e","f","g"); といった「重複する要素を含むパターン」はありません。要素はすべてユニークです。 よろしくお願いいたします。
- ベストアンサー
- PHP
- EXCELで改行しながら文字表示
セルB1に 「12345678(改行)ABCDEFGH(改行)abcdefgh(改行)09876543」 と表示させたいです。(文字列は例) 半角8文字単位で改行 表示させる元データは、 セルB5=C5&D5&E5&F5 C5=12345678(文字列) D5=ABCDEFGH(文字列) E5=ABCDEFGH(文字列) F5=09876543(文字列) 各々文字列が入力されないこともあります。 (文字が無ければ前詰めですが、できるだけ8文字単位にしたいので 半角スペースを入れたりします。) C5からF5を入力することにより、カーソルをB5にもっていくと 結果としてB1に表示させるというものです。 文字列は*5行のセルだけでなく、8000行くらいあります。 欲をいえば、カーソルがある行のセルB*を表示させることが できればベストです。 (例えば、F4000にカーソルがあれば、B4000の文字を表示する) 宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- [PHP]csvファイルを生成するときのマックの改行対応の方法について
[PHP]csvファイルを生成するときのマックの改行対応の方法について 現在、phpでcsvファイルを出力しているのですが、Windowsだと旨く改行が反映されるのですが、Macだと旨く行きません。。。 改行は「\n」を使っていましたが、マックの改行コードが「\r」との事なので、「\n\r」としたのですが、旨く反映されないようです。。。 途中は省きますが $csvData .= "A列" . "," . "B列" . "\n\r"; $csvData .= "a" . "," . "b" . "\n\r"; $csvData .= "c" . "," . "d" . "\n\r"; として、マックでオープンオフィスを使用して開くと、 A列,B列a,bc,d と1行で出て来てしまします。 よろしくお願いします。
- ベストアンサー
- PHP
- C# 文字列を改行コードで分割
C# 文字列を改行コードで分割 テキストボックスに記載された文字列を1行ごとに取り出そうと思い string[] strs = textBox1.Text.Split('\n'); とコーディングしたら、末尾に\rがついてしまいました。 末尾の\rを削除するコードを追加して書けばよいのですが、改行コード\r\nで分割する方法ありましたらお教えください。
- ベストアンサー
- C・C++・C#
- 改行コードについて
ファイルの文字コードはutf-8で改行コードはLFです。 メール送信時にメール文面の一部にいれるテキストを mysqlに保存しています。 メール送信のソース内でデータを読み込み送信までは できているのですが改行コードを変換したく $msg = str_replace("\r\n", "\n", $msg); とやってみましたが改行されず普通に\r\nと表示され うまく変換ができません。 いろいろと試した結果以下のソースでは正常に改行されました。 $msg = str_replace("\\r\\n", "\n", $msg); メール送信前にデバッグでしてみましたが読み込むデータの 改行部分は\r\nとなっているのは確認済みです。 \を多くつければ改行はできるようなのですがこれは仕様なの でしょうか? またmysqlに入れてあるデータはフォームから入力し登録 しているのですがLFの改行コードは\nなので登録時に\r\nではなく \nと変換してからmysqlに登録するのがいいものなのでしょうか?
- 締切済み
- PHP
お礼
なるべく簡単に1行で済ませたかったのでsplitしました。 ありがとうございます。