• ベストアンサー

split後のデータ数でなくて、リスト値を代入したい。

mauraの回答

  • maura
  • ベストアンサー率46% (48/104)
回答No.3

#1の方の補足です ハッシュじゃなくて、配列に入れればいいと思います。 $hash{'TEN'} = split(/,/, "100, 50, 70"); ↓ @TEN = split(/,/, "100, 50, 70"); ↓ $hash{'TEN'} = \@TEN; print $hash{'TEN'}->[0]; # 100と表示

関連するQ&A

  • Perl ハッシュの値のリストをスカラーコンテキストで評価すると?

    こんにちわ。 初めての利用です。 Perlの事で質問なのですが、 my $score=($hash{"fred"},$hash{"barney"},$hash{"wilma"}); とすると$scoreにはキー「wilma」に対応した値が代入される様です。 リスト形式をスカラーコンテキストで評価すると、リストの要素数を返すと記憶していたので、この場合$scoreには3が代入されると思っていたのですが・・・。 試しに my @scores=($hash{"fred"},$hash{"barney"},$hash{"wilma"}); $score=@score; とすると$scoreに3が代入された様です。 この二つの式では一体何が違うのでしょう・・・?

    • ベストアンサー
    • Perl
  • listで変数代入

    あらかじめ、データ行のデータ数がわかっていれば、listで変数へ代入してあげれば問題ないと思いますが、データによってはデータ行のデータ数が10個とかそれ以上になると、その分だけlist($data_○.......................)とすると面倒なので、簡単に行のデータ数をカウントしてlist関数を使った方法で処理する方法はないのでしょうか? $data_01とかアンダーバー末尾数字みたいな方法でlist($data_01,$data_02,$data_03,,,,,,,,,,,,,,,,,,,,,)として変数に代入したいで教えて下さい。 sample.csv りんご1,ばなな1,いちご1 りんご2,ばなな2,いちご2 りんご3,ばなな3,いちご3 define(csvdata, "sample.csv"); $data = file(csvdata); for ($i = 0; $i < count($data); $i++) { list($data1,$data2,$data3) = split(",", $data[$i]);

    • ベストアンサー
    • PHP
  • 読み込んだデータを配列へ代入する方法

    ---ここから--- 1,2 3,4 ---ここまで--- このようなファイルを読み込んでデータを配列へ格納するには, $pathname="D://data.txt"; open MYFILE, "$pathname"; @list=<MYFILE>; for($i=0;$i<2;$i++){ @dat=split(/,/,$list[$i]); print @dat; } close MYFILE; といったようなforあるいはwhileで1つの配列(上の場合だと@dat)に1行のデータを繰り返し入れていく方法しか思い浮かびません。できれば1行目のデータは@dat1という配列へ,2行目のデータは@dat2という配列へ,といったように行ごとに別々の配列へ代入させたいのですが良い方法はないでしょうか。 もしくは@dat=([1,2],[3,4])のような2次配列の形にでもできれば最高なのですが、、、

    • ベストアンサー
    • Perl
  • 動的ハッシュを作って取り出したいのですが・・・

    お世話になります。 フォームから送られてくるデータを動的に作ったハッシュで参照出来るように取り組んでるんですが、思ったように出来ず思い悩んでおります。 どうすれば、意図した形でデータを取り出すことが出来ますでしょうか my %FORM = ( 'd01' => 'あ', 'd02' => 'い', 'd03' => 'う', 'd04' => 'え', 'd05' => 'お', 'd06' => 'か', 'd07' => 'き', 'd08' => 'く', 'd09' => 'け', 'd10' => 'こ', ); for(sort { $FORM{$a} cmp $FORM{$b} } keys %FORM){ print "$_ = $FORM{$_} \n"; } $list="d01,d02,d03,d04,d05,d06,d07,d08,d09,d10,"; $i=-1; foreach (split/,/,$list){ $i++; $hash{$_}=$i; } for(sort { $hash{$a} <=> $hash{$b} } keys %hash){ print "$_ = $hash{$_} \n"; $view = ${"FORM$_"}; print "$view\n"; }; 最後のprint "$view\n";箇所で、 $list="d01,d02..." を split/,/,$list したので、 $FORM{d01} $FORM{d02} となるようにして、 「あ い う え お」と取り出したいのです。 ご教授のほど、よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 前後のデータ

    お世話になります。 先日、「外部テキストに保存されているデータを読み込んで、任意のデータで並べ替えたいです。」と言う質問をさせて頂き、結果を得ることが出来たのですが、次のステップで又行き詰まってしまいました。 今度は、前の人と次の人を取得してリンクで繋ぎたいです。 宜しくお願いします。 data.txtには、次の様なデータが格納されてます。 namae<>なまえ<>23<>2008/04/01<> namae<>なまえ<>23<>2008/04/01<> namae<>なまえ<>23<>2008/04/01<> ------------------------------------------------------------------ /* 名前比較用の関数 */ function namecmp($a, $b) {  return strcmp($a[1], $b[1]); } $list = file("data.txt"); foreach ($list as $line) {  // 一度配列に格納  $arr[] = explode("<>", $line); } // ソート usort($arr, "namecmp"); for($i = 0; $i < count($arr); $i++) {  list($data01, $data02, $data03, $data04) = $arr[$i];  print $data02 . ":" . $data04 . "<br>\n";  print "<a href=\"前の人の".$data01.".html\"></a>  print "<a href=\"次の人の".$data01.".html\"></a> } ------------------------------------------------------------------

    • 締切済み
    • PHP
  • リスト

    プログラムのデータ構造の勉強を進めてるのですが リストのところである問題がどうしてもリスト(ポインタ)で解けません 基礎的なことがわかるのですが(ノードの使い方などマロックなど) その問題は人の名前を入力し国語、数学、英語の点数を入力して3教科の点数を合計し名前、それぞれの点数、合計の表示、そしてまた入力を続けると指示した場合また名前3教科の点数をいれてと繰り返すのですが、繰り返したときに今まで入っているデータの人々の合計を比較して表示を昇順にしなくちゃなりません。どうすればいいか検討もつきません。 typedef struct _node { char name[10]; int Jap; int math; int eng; struct _node *next; } Node; で構造体はいいのでしょうか? できればくわしくプログラムを教えてください。 お願いします。

  • SQL及びSMARTYの利用

    お世話になります SMARTYとmySQLを利用してサイトを構築しています。 下記の様なSQLデータからデータを一行ずつ生成したいです。 名前だけは取り出すことが出来たのですが、年齢の取り出し方が判りません。 アドバイスをお願い致します SQL------------------------------------------------------------------- ---------------------------- | id | namae | age | ---------------------------- | 1 | 田中 | 22 | ---------------------------- | 2 | 佐藤 | 29 | ---------------------------- PHP------------------------------------------------------------------- //空の配列を用意 $name = array(); //SMARTY用の代入変数を生成 while($data = $res -> fetchRow()){ array_push($name,mb_convert_encoding($data['namae'],"SJIS","UTF-8")); } $smarty->assign("namae",$name); HTML------------------------------------------------------------------ {foreach from=$namae item=namae} {$namae}{$age}<br> {/foreach} ----------------------------------------------------------------------

    • ベストアンサー
    • PHP
  • foreachで一致した説明文を表示(初心

    この間ポケモン図鑑について質問させていただいた者です。(ID違いますけど^^; http://oshiete1.goo.ne.jp/kotaeru.php3?q=1649007 変な質問をしてるかもしれませんm(_ _)m @list内には 手持ち・・(略)<>あくしゅう<> ほのお・こお・・<>あついしぼう<> 戦頭に出ると・・<>あめふらし<> このように1つ目に説明文、2つ目に(特性の)名前が入っています。 それを、 foreach(@list){ ($content,$name)=split(/<>/); } こんな感じでスカラー変数に代入してるのですが、 各ポケモンのデータを表示するページで説明文を表示するにはどうすればいいのでしょうか? 「$end_tokuse」というスカラー変数にあらかじめ各ポケモンの特性の名前は入っていて、それを上の処理と一致するか、しないかでこんな感じで print <<EOM; <table><tr><td> EOM ここに上の処理を print <<EOM; </td></tr></table> EOM 持って来て表示させようかと思っていたのですが、表示するデータの量がほかにもたくさんありすぎていちいち切っていると 編集が大変面倒になるので、一致した説明文をスカラー変数に代入して print <<EOM; <table><tr><td> $setume </td></tr></table> EOM このようにしたいのですが、どうすればいいかわかりません。 一致した説明文をスカラー変数に代入して表示させるにはどうすればいいですか。 わかりにくいですがよろしくお願いします。

    • ベストアンサー
    • Perl
  • 雛形文章にリストデータを置換しファイルを複数生成

    文字数制限のためにタイトルがわかりにくくてすみません。 あるリストのファイル(excelやcsvなど)のデータを ある文章のファイル(wordなど)のテンプレートに代入し、 データの数だけ文章ファイルを生成することはできないでしょうか。 自分ではリストのファイルとテンプレート文章のファイルのみを用意すればよく、 後は自動で行なってくれる方法を探しています。方法は問いません。 例えば) list.xlsx 名前 出身 説明 A aaaa ααα B bbbb βββ C dddd γγγ (空白はセルの区切りです) template.docx 名前:○○ 出身:△△ 説明:×× があったとして、○○にlist.xlsxの「名前」列を、△△には「出身」列を、××には「説明」列を代入します。 目的の生成させるファイルは 1.docx 名前:A 出身:aaaa 説明:ααα 2.docx 名前:B 出身:bbbb 説明:βββ ということを自動化したいです。 生成されるファイルは複数でなくても、ひとつのファイルに縦に次々と生成される形でも構いません。 例ではエクセルとワードにしましたが、データベースと文章形式のファイルであれば何でも構いません。 以上、長々と書いてしまいましたが、どうぞよろしくお願い致します。

  • 先頭の単語が一致した時のデータ追加

    【データ】 (A) A A2 "one" 7 A 3C three 9 B DD "two" 11 C CDE four 25 C 4D five 33 D YY six 27 ・ ・ (B) A okinawa kagoshima miyazaki B kumamoto oita D fukuoka E saga nagasaki ・ (A)と(B)のデータを比較し、先頭の単語が一致した時のみ、先頭の単語を除いた(B)の行を (A)の末尾に加えるという処理をしたいです。 【目標】 A A2 "one" 7 okinawa kagoshima miyazaki A 3C three 9 okinawa kagoshima miyazaki B DD "two" 11 kumamoto oita C CDE four 25 C 4D five 33 D YY six 27 fukuoka ・ ・ 以前、回答して頂いた方法を踏まえ、以下の処理を行いましたが上記のような結果がでません。 宜しくお願いします。 #!/usr/bin/perl open(FILE1, "<aaa.txt") || die "File1 Open Error! \n"; open(FILE2, "<bbb.txt") || die "File2 Open Error! \n"; open(OUT, ">zzz.txt") || die "OUT Open Error! \n"; my @data1 = <FILE1>; my @data2 = <FILE2>; chomp @data1; chomp @data2; foreach my $line1 (@data1) { my @array1 = split(/\t/, $line1); push @{$hash1{$array1[0]}}, @array1[1, -1]; for my $key1 (sort keys %hash1){ foreach my $line2 (@data2) { my @array2 = split(/\t/, $line2); push @{$hash2{$array2[0]}}, @array2[1, -1]; for my $key2 (sort keys %hash2){ if($key1 eq $key2){ print OUT join("\t", ($key2, @{$hash2{$key2}}, @{$hash1{$key1}})), "\n"; } } } } }

    • ベストアンサー
    • Perl