• ベストアンサー

splitを使って、コンマ区切りで変数を出したいです。

こんにちは。 いつもお世話になっております。 データファイルを開き、一覧を $all_dataに入れました。 その後、 ($aa,$bb,$cc) = split(/\,/,$all_data); と書いて、変数$aa $bb $cc へ入れたいのです。 3個程度の変数に格納するのは、問題なく出来たのですが、 ($aa,$bb,$cc)を、($aa,$bb,…36個)の変数で指定した途端 $all_data の最後のデータのみ$aa $bbに入り、その後の $cc以降の変数は、空白となってしまいました。 一覧を、$all_dataに入れた後、print で一覧を出してみたのですが、 あいう,えお,かき,くけこ,…<略>… と、36個の文字が,で区切られて出てきました。 何が悪いのか判らなくて、途方にくれております…。 split を使って36個もの変数に直そうとするのが 間違いなのかな、と思って @array = split(/\,/,$all_data); として、 $aa = $array[0]; $bb = $array[1]; としてみたのですが、$all_dataの最後と、最後から 二つ目のデータが$aa $bb に入り、$cc 以降は 空白となってしまいました……。 どうか、ご指導よろしくお願い申し上げます。

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

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

  • ベストアンサー
  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

なにか見落としてるんでしょ。 以下をそのまま実行してみて下さい。Windowsで。 #!Perl $all_data = 'あいう,えお,かき,くけこ,さ,し,すせそ,た,ちつ,てと,なにぬ,ねの,は,ひふへ,ほ,たちつ,て,と,なに,ぬ,ねの,ま,みむめ,もや,ゆよ,ん,あいう,えおか,きく,け,こ,さし,す,せそ,た,ちつて'; @array = split(/\,/,$all_data); print "num of array = " . @array . "\n"; for (@array) { print "$_\n"; } __END__ D:\@ai\@Perl\app>pgm1.pl num of array = 36 あいう えお かき くけこ さ し すせそ た ちつ てと なにぬ ねの は ひふへ ほ たちつ て と なに ぬ ねの ま みむめ もや ゆよ ん あいう えおか きく け こ さし す せそ た ちつて D:\@ai\@Perl\app>

sibazuke
質問者

お礼

guci-ok こんばんは。ご指導ありがとうございました。 お礼の書き込みがこんなに遅くなってしまい、誠に 申し訳ありませんでした…。 実は、試しに使ったコードとか、稚拙な注意書きなどを チマチマ消す作業をしていたのですが、大事な部分まで消してしまって……。 半泣き状態で、一からコードを書き直しておりました。 そして、何がよかったのかもわからないうちに、ちゃんと 意図通りの動きをしてくれたのです。 guci-okさんのおっしゃる通り、たぶん何かを見落として いたのだと思います。 お騒がせしてしまい、申し訳ありませんでした。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

動作から見て、 カンマが','ではなく','のように途中から全角になっていたりしませんか できたら、実際使われているソースと$all_dataを実際にprintしたもののコピーペーストしたものを補足してください。

sibazuke
質問者

お礼

BLUEPIXY様。 こんばんは。ご指導ありがとうございました。 お礼の書き込みがこんなに遅くなってしまい、誠に 申し訳ありませんでした…。 実は、ソースを見て頂けるのだから、と、コメントアウト していた、試しに使ったコードとか、稚拙な注意書きなどを チマチマ消す作業をしていたのですが、大事な部分まで消してしまって……。 半泣き状態で、一からコードを書き直しておりました。 そして、何がよかったのかもわからないうちに、ちゃんと 意図通りの動きをしてくれたのです。 お騒がせしてしまい、申し訳ありませんでした。

関連するQ&A

  • preg_splitがうまくいかないので、教えてく

    9月18日(火)7時55分を配列へ格納したいです。 ■1 $data = preg_split("/月|日|\(.\)|時|分/",$data); とやると、うまく区分けされないところがあります。 Array (  [0] => 9  [1] => 18  [2] => (火)7  [3] => 55 ) ■2 preg_split("/月|日|\(*\)|時|分/",$data);とやると、 曜日のところが変な感じになります Array (  [0] => 9  [1] => 18  [2] => (火  [3] => 7  [4] => 55 ) ■3 preg_split("/月|日|\(.*\)|時|分/",$data); もしくは、 preg_split("/月|日|\(.*?\)|時|分/",$data); とやると、曜日が取得できません Array (   [0] => 9   [1] => 18   [2] =>   [3] => 7   [4] => 55 ) ■質問 ・きれいに区切るには、どう書けば良いでしょうか? ・後、正規表現も勉強したいので、それぞれなんで駄目なのか教えてください

    • ベストアンサー
    • PHP
  • 任意の区切り文字でsplitする方法

    VBAで任意の区切り文字でsplitする方法を教えてください。 例えば 123 456 789 333 3444 66 65 22 といようなスペースあるいはタブで区切られたテキストデータがあるとします。 これを配列に格納したいのですが、 この区切りがタブ一つとか、スペース一つとか決まっていれば split関数で簡単に配列に格納することができますが、 タブかも知れないし、スペースがかも知れないし その数も未定の場合にはどうしたら良いですか? replace関数を使って、まず全てのタブをスペースに変換し その後に、複数のスペースを一つのスペースに変換し 最後にsplit関数を使うという方法しかないでしょうか? もっとスマートな方法があれば教えてください。

  • エクセルVBAで変数をセルに一行ずつ入力したい

    色々検索してみたのですが難しくてわからなかったので質問させてください。 変数に格納した値 AA BB CC を一行ずつセルに入力するにはどうしたらいいでしょうか? よろしくお願いいたします。

  • 複数の空白のsplitについて

    VB.NEtを最近はじめた初心者です。 CSVファイルを読み込んでデータを空白でsplitして 配列に格納しようとしたのですが、 CSVファイルのデータの間にある空白の数が1~3個 と一定ではなかったためうまくsplitできません。 どのように対処すればよいでしょうか。 ご教授願います。

  • split

    $msg = "aa,bb,cc"; という文字列から真ん中だけを取り出したいとき、 正規表現で、$2という風に取り出すのと、splitを使って my($t1,$t2,$t3) = split(/\,/$msg); として$t2で取り出すのとでは、処理の速度やメモリ使用率においてどちらが効率がいいのでしょうか? また、この場合は、$t1と$t3に無駄な代入が起こってしまいますが、これを解消する手立てはありますでしょうか?

    • ベストアンサー
    • Perl
  • 多次元配列から値を抽出する方法

    Array ( [0] => Array ( [0] => Array ( [0] => Array ( [1] => XX ) ) [1] => AA [2] => BB [3] => CC [4] => DD ) ) 上記配列から値(XX)を1つの変数に取り出すにはどうすればよろしいでしょうか?

    • ベストアンサー
    • PHP
  • スカラー変数中の改行コードでセパレーションしたい。

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

    • ベストアンサー
    • Perl
  • CLASSPATHと環境変数について

     Java初心者です、宜しくお願いします。  SJC-Pの問題です、以下の問題の意味が分かりません。 <問題>  現在CLASSPATH環境変数に設定されているパスが/AA/BBとします。  Testクラスが/AA/BB/CC/DDにあり、カレントディレクトリが/AAである場合、 次のプログラムTestが正しく実行される回答を選べという問題があります。  ===================================================  Package CC.DD ;  public class Test {   public static void main (String[] args) {  System . out . print(“java”) ;  }  }  ===================================================  答えは「java CC . DD . Test」なのですが、「現在CLASSPATH環境変数に設定されている パスが/AA/BBとします。」という意味が理解できません。  「現在CLASSPATH環境変数に設定されているパス」とはどのような意味でしょうか。  現在フォルダは、/CC/DDしか作成されていないという意味でしょうか、それにしても、 設問は「Testクラスが/AA/BB/CC/DDにあり」と書かれていることから、既にCC/DDフォルダ は、 BBフォルダの直下に作成されていると考えるのが正しいと思うのですが。  そもそも、「現在CLASSPATH環境変数に設定されているパス」とは、どのような意味を持つ のでしょうか。  以上宜しくお願いします。

    • ベストアンサー
    • Java
  • 3つの連想配列を交互に代入して、新しい連想配列を作りたい

    PHP Version 5.1.6を使っています。 それぞれの連想配列を先頭から順番に交互に代入したいのですが、 どのようなプログラムでできるのでしょうか? $arr1 = array(a1=>"aa1", a2=>"aa2", a3=>"aa3"); $arr2 = array(b1=>"bb1", b2=>"bb2", b3=>"bb3"); $arr3 = array(c1=>"cc1", c2=>"cc2", c3=>"cc3"); 代入後 $new_arr = array(  a1=>"aa1",  b1=>"bb1",  c1=>"cc1",  a2=>"aa2",  b2=>"bb2",  c2=>"cc2",  a3=>"aa3",  b3=>"bb3",  c3=>"cc3", );

    • ベストアンサー
    • PHP
  • SQLでのsplitなどは?

    SQLでsubstrなどは使えますが、 splitなどは使えるのでしょうか? 現在 m_784378_0410 m_klds_0411 m_klsdas_0411 m_klsdas_0412 表示したいデータ 0410 0411 0412 というデータを 後ろの日付のみでグループ化したいのですが、 文字のサイズが固定ではないため、一度splitなどで配列に格納したいのですが、やり方がわかりません。 何かよい方法があれば教えてください。

専門家に質問してみよう