• ベストアンサー

スカラー変数中の改行コードでセパレーションしたい。

複数行に渡る文字列を含むデータをスカラー変数に格納したのですが 格納後にこれを改行コード(\n)をセパレータとして配列に分けたいと思っています。 データ(abc.txtd)は aaaaaa bbbbbb cccccc といったものです。 $data = "abc.txt"; @array = split (/\n/, $data); としてもうまく配列に分割してもらえないのですが、どうすればよいのでしょうか。 基本的な質問で申し訳ありませんが、どなたかよろしくお願いいたします。

  • Perl
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> $data = "abc.txt"; > @array = split (/\n/, $data); これだと、"abc.txt" という文字列を splitすることに なりますけど? テキストファイルの各行を要素にした配列を作りたいのなら、 open my $fh, '<', "abc.txt" or die $!; chomp(@array = <$fh>); close $fh; てな感じで読み込めます。

miyakosais
質問者

補足

すいません。すでに $ff というスカラー変数に ファイルを読み込んであり、これを改行コードでセパレーションした 配列をつくりたいと思っています。 この場合も chomp(@array = <$ff>); とするだけで読み込めますでしょうか。 なぜかうまくいかないのですが、やはり open my $ff, '<', "abc.txt" or die $!; というところをしなければならないのでしょうか。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> すいません。すでに $ff というスカラー変数に >ファイルを読み込んであり、これを改行コードでセパレーションした > 配列をつくりたいと思っています。 であるなら、chompの必要はありません。 @array = split /\n/, $ff; でいいはずです。 > なぜかうまくいかないのですが、 split した結果はどうなってますか? できればファイルからどう読み込んだかと あわせて補足をお願いします。

miyakosais
質問者

補足

大変申し訳ありませんでした。 あれこれと試行錯誤していた結果、改行コードが UNIX形式(\n)ではなくMac形式(\r)になっているという とんでもなく初歩的なところに原因がありました。 大変御迷惑をおかけしました。

関連するQ&A

  • 配列にある文字列を1つの変数に改行付きで格納する方法

    配列にある文字列を1つの変数に改行付きで格納する方法 Array ( [0] => レタス [1] => トマト [2] => きゅうり ) などの配列を $yasai 変数へ ------ レタス トマト きゅうり ------ と格納してテキスト表示させたいのですが、どのようにすれば可能でしょうか? そもそも可能なのでしょうか?ご存知の方、いらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • PHP
  • perlで重複データを集計

    aaaaaa,10 bbbbbb,8 cccccc,3 bbbbbb,2 aaaaaa,1 このようなデータをHTMLフォームから取り込み aaaaaa,11 bbbbbb,10 cccccc,3 と、同じデータの合計値を出すシンプルな方法を教えてください。 CSVからの読み込みではなくフォームからのデータになります。

    • ベストアンサー
    • CGI
  • Smarty ループ回数を 可変にしたい

    お世話になります。 以下のような多次元配列があり、以下のようなリストを表示させたいのですが。 $data = array( [0] => array( [date] =>'2008-04-13' [title] => array( [0] =>'aaaaaa' [1] =>'bbbbbb' [2] =>'cccccc' ) [id] => array( [0] => 23 [1] => 24 [2] => 25 ) ) [1] => array([date] =>'2008-03-03' [title] => array( [0] =>'ddddd' [1] =>'eeeee' [id] => array( [0] => 21 [1] => 22 ) ) ) $smarty->assign('data', $data); こんなリストにしたい。 2008-04-13 23---aaaaaa 24---bbbbbb 25---cccccc 2008-03-03 21---dddddd 22---eeeeee テンプレート側で下記のコーディングを試みましたが、だめでした。 {foreach from=$data item=value01 } <dt>{$value01.date}</dt> {foreach from=$value01 item=value02 } <dd>{$value02.id}---{$value02.title}</dd> {/foreach} {/foreach} 結果 2008-04-13 2 2008-03-03 2 となりました。 ネストしたループをそれぞれの id または title の要素数だけループさせるにはどうしたらよいでしょうか。 どなたかご教授の程、よろしくお願いします。

    • ベストアンサー
    • PHP
  • @の配列変数ではなく$のスカラー変数でデータを取り込みたい

    prel作成中で壁にぶつかってしまったので質問させてください。 以下のプログラムでdata.txtのデータを$dataに読み込みます。 $datfile = "./data.txt"; open(IN,"<$datfile"); $data = <IN>; close(IN); data.txtのデータは以下のものが入ってます。 --------------- 田中 石田 佐藤 --------------- @dataとすると取り込み出来るのは分かったのですが、どうしても$dataでとりたく思ってます。 上記のスクリプトの場合は、先頭の行の「田中」のみ格納されてしまってます。 改行されていても、1つの変数として取り扱いたいです。 不足している内容があるかもしれません。 すみません。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 改行入り変数を改行を残したまま改行区切りで配列に入れる方法

    file()関数と同様の事を、ファイル名を指定ではなく変数名を指定して行いたいのですが、explode()関数だと改行(区切り文字)は削除されて配列に格納されてしまいます。とりあえず以下の2つの方法しか思いつかないのですが、どちらが効率的でしょうか? 又、他にもっと良い方法ありましたら教えて欲しいです。お願いします。 方法1 explode後、配列を再ループし末尾に改行コードを付与 方法2 strstrとsubstrで変数をカットしながら配列に格納

    • 締切済み
    • PHP
  • 改行だけの行の削除

    $data1 = file_get_contents("xxxx.txt"); で、読み込んだデータの中に 「 aaaaaa bbbbbb xxxxx yyyyyy 111111 2222222 」 というレコードが入っていたとします。 この中で、改行だけの行を削除し、$data2 に移したいのです。 先頭行と最終行は、trimで削除できましたが、 $data1 = str_replace("^\\n", "", $data2); でも除去できません。 どうすればいいのか、お教えください。

    • ベストアンサー
    • PHP
  • bashで変数中の改行はどのように表現するの?

    複数のファイルが置かれたディレクトリで(bashで) $ ls > file.txt $ mapfile ary < file.txt とすると、各ファイル名を要素とする配列が変数aryに入ります。 この時、各配列要素にはファイル名だけでなく、file.txtの各行の改行コードが含まれます。 (参考 http://emasaka.blog65.fc2.com/blog-entry-560.html ) この配列要素から改行コードを取り除くべく for LINELF in "${ary[@]}" do LINE=${LINELF%\n} done; としても改行コードを取り除けません。 for LINELF in "${ary[@]}" do LINE=${LINELF%?} done; とすれば取り除けるので実害はないのですが、変数の値の中の改行コードはどのように表現するのでしょうか? 2011年5月12日

  • VBA  改行でsplitしたい

    現在ウェブページから取得した文字列を改行部分でsplitして配列にしたいと考えています。 ob10-6<br /> this is test data ↑このような文字列を取得し、<br />部分で分割したいのですが、 この文字列がtmpという変数に入っているので、 x = split( tmp,"<br />") により、配列xの中に入れようとしたところ、どうも<br />部分で分割されていないようなのです。 vbCrLfなどを代わりに使用してみましたが分割できません。。 なぜ分割できないか、また、分割の仕方を教えていただけると幸いです。 よろしくお願いいたします。

  • Accessのクエリとテーブル突合せについて

    いつもお世話になっています。 Access2007で下記のような2つのテーブルをクエリで比較した際、なぜかNULLの部分だけのぞんだ結果にならないという現象があり、理由がわからず困っています。 内容としては、「(1)明細データ」のすべてと、「(2)コード表」をあて、「(3)結果リスト」のような表示でコードを追記するようなものです。 下記の「__」は表記の便せん上分かりやすいようNULLを示しています。 「(1)明細データ」はクエリで2つのテーブルを突き合わせ「区」を付けたしたもので、「(2)コード表」はマスタ用のテーブルとして手作りしています。 「(2)コード表」を手作りする際にはNULLの部分はなにも入れずに空にしています。 (1)明細データ 商品名 区 AAAAAA XX BBBBBB YY BBBBBB YY CCCCCC XX CCCCCC YY CCCCCC __ (2)コード表 商品名 区 変換CD AAAAAA XX 000101 AAAAAA YY 000102 AAAAAA __ 000199 BBBBBB XX 000201 BBBBBB YY 000202 BBBBBB __ 000299 CCCCCC XX 000201 CCCCCC YY 000202 CCCCCC __ 000299 (3)結果リスト 商品名 区 変換コード AAAAAA XX 000101 BBBBBB XX 000201 BBBBBB YY 000202 CCCCCC XX 000301 CCCCCC YY 000302 CCCCCC __ 000399☆ ところが、クエリで実現しようとするとこの「(3)結果リスト」の☆のついている一番最後の結果が CCCCCC __ ______ となってしまい、変換コード部にコードを埋め込むことができません。 こういう現象は初めての為、どのように聞くべきかわからないのですが、もし何かご存知、ないし、ヒントになり得ることを知っておりましたらお教えください。 以上、よろしくお願いいたします。

  • 区切り文字を配列に格納する方法を教えて下さい。

    区切り文字を配列に格納する方法を教えて下さい。 $array[] = "abc,1981,1,12"; $array[] = "def,1982,2,18"; $array[] = "ghi,1991,4,12"; list($name[$i],$yy[$i],$mm[$i],$dd[$i]) = split("\,",$array[$i]); でループさせればそれぞれの変数に代入できますが、例えば $name["abc"]["yy"] = "1981"; $name["abc"]["mm"] = "1"; $name["abc"]["dd"] = "12"; のように分解するにはどうすれば良いでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう