• ベストアンサー

1_1から1_5へカウントアップ後、2_1から1_5へカウントアップしたい

お世話になります。 題名にあります通りなんですが、1_1から1_5にカウントアップしたら 2_1から2_5へとカウントアップするようなスクリプトを考えているのですが 下記の例ですと、1111122222333334444455555となってしまいなす。 どなたか良きアドバイス頂けないでしょうか。宜しくお願いします。 @list = (0, 1, 2, 3, 4, 5); foreach $b(@list) { for ( $a = 1 ; $a <= 5 ; $a++ ) { print ""; print "$a_$b\n" ; } }

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

  • ベストアンサー
  • hara_peko
  • ベストアンサー率28% (11/38)
回答No.1

foreach my $first (1..5) { foreach my $second (1..5){ print "${first}_$second\n"; } } こんな感じの処理でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kapura
  • ベストアンサー率50% (48/95)
回答No.3

# 示されたプログラムを実行すると、最初に0も5回出力されると思うので、@list = (1, 2, 3, 4, 5); の間違いですよね? そういう出力になるのは、print "$a_$b\n" で$a_という変数と解釈されているからでしょう。$a_という変数はないのでその部分は何も出力されず、$bだけが展開されている。 これを解決するには、No.1の方も示されている通り、$aの代わりに${a}とするなどすればいいです。print $a, "_$b\n" とか他にも解決策はいろいろありますが。 でもこう書き換えても望みの結果は得られないでしょう。先に動かしたい数字は_の右の数字なのですから、print "${b}_$a\n" という風にaとbを逆にするとかしないといけないと思いますよ。

全文を見る
すると、全ての回答が全文表示されます。
  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.2

print "$a_$b\n"; この段階で $a_ がひとつの変数とみなされています。 つまり、$aとは別に、グローバルに$a_が定義されてしまっている状態になっています。 解決策は、 print "${a}_$b"; とすることなどがあげられますが、 こういったあいまいな記述によるエラーを防ぐためには、 use strict; と最初に宣言するといいでしょう。(文法が厳しくチェックされるので、あいまいな記述ができなくなります)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 数字のカウントを上げる際、01と1でカウントをスタートさせたい

    題名にもあります通り、数字のカウントを上げる際、01と1でカウントをスタートさせたいのです。どなた様か良いお知恵をお借りできませんでしょうか。 for構文(やwhile構文foreach構文)で下記の場合ですと、1からカウントするのはわかるのですが・・・。 for ($n =1; $n < 14; $n++) { print "<br>\$n = $n"; } イメージとしましては、printする際、 $n = 1 $n = 001 $n = 2 $n = 002 .. $n = 10 $n = 010 $n = 11 $n = 011 といった感じで出力させたいのです。 お手数お掛けしますが、宜しくお願いします。

    • ベストアンサー
    • Perl
  • Excelのカウントがうまくいきません。

    Excel初心者です。 添付画像のような例の場合のカウントがうまくいかず困っています。 Excelに詳しい方、どうかご教示いただけますようお願い致します。 カウントしたい条件は下記の通りです。 (1)A1~A5の範囲で数値の入っているセルをカウントする。  ⇒今回の例ではA1とA3とA4がカウントの対象。 (2)B1~B5の範囲で「みかん」「りんご」「柿」の  いずれかの単語が入力されているセルをカウントする。  ただし、A1~A5のセルが空白の場合のみ、  これらの単語が入力されているセルをカウントする。  ⇒今回の例ではB2とB5がカウントの対象。  尚且つ、ひとつのセルに複数の単語が入力されている場合は、  単語の数に関わらず、カウントを1とする。  ⇒今回の例ではB5がカウントの対象。 以上の条件を満たす合計をB7に求める数式を悩んでおり、 今回の例ならば、B7の合計は5となるはずなのですが、 なかなかうまくいきません。 どうぞ宜しくお願い致します。

  • Excel 入力規則のリストで選択した項目のカウントアップ

    こんにちは。Excelでのカウントアップについての質問です。 入力規則でドロップダウンリストを作成しておりそちらで選択した項目の選択回数を別Sheetのセルにカウントアップさせて行きたいのですが、どなたか良い方法がございましたら御教授願います。 リストがあるセルはSheet1のC16で毎回リストの項目を選択して行きます。 そしてリストは名前の定義で作成しておりSheet2のD4:D23にそれぞれのリストで選択する項目が有ります。 Sheet2!E4:E23のセルにSheet1!C16で選択したリストの項目をどの項目を何回選択したかカウントして行きたいと考えております。 リストの内容を引っ張って来るのはCOUNTIF関数で出来たのですが、当然違う項目を選択するとカウントが0に戻ってしまいます。 ≪現状≫ 項目Aを選択⇒Aのカウントが1になる 項目Bを選択⇒Bのカウントが1になる代わりにAのカウントが0になる ≪理想の形≫ 項目Aを選択⇒Aのカウントが1になる 項目Bを選択⇒Bのカウントが1になりAのカウントも1のまま 以上、宜しくお願い申し上げます。

  • $bは表示されない??

    ######## @a=(1,2,3,4,5,6,7); foreach $b (@a[0..3]){ $b++; } print @a; print "\n"; print $b; ######## とした時に、$bが表示されません。なぜなのでしょうか??5が表示されるのかなと思っていたのですが・・・ でも ######## @a=(1,2,3,4,5,6,7); for(@a[0..3]){ $_++; } print @a; print "\n"; print $_; ######## とすれば、$_は表示されます。 私はまだPerlもプログラミングも初心者なので、誤解してるところがあったらご指摘ください。 よろしくお願いしますm(_ _)m

    • ベストアンサー
    • CGI
  • Perlで1~10まで全部足す。簡単に書くには?

    題名のとおりなんですが。 Perlで1~10まで全部足すのに、 1番簡単に書いたらどんな感じなるでしょうか? (一回足すごとに結果は表示) 私は全然浮かばず、 $a = 1 print "$a\n" $b = $a + 1 print "$b\n" $c = $b +2 " …続く こんな感じのお粗末なものを書きました。 whileやforを使えばもっと簡単に書けると思いますが、 どなたかご存知でしたら教えてください。

    • ベストアンサー
    • Perl
  • ボタン押したときだけカウント

    http://www.sic.shibaura-it.ac.jp/~p00050/ でホームページを作っています。 左下のほうにあるリンクをクリックしたときだけ、カウントが上がるようにしたいんです。 でも表示更新したときにもカウントが上がってしまいます。 左下の部分のフレームはcount.cgiで、ソースは次のとおり。 #!/usr/local/bin/perl $data = 'data.dat'; open(F, "$data"); $count = <F>; close(F); $count++; open(F, ">$data"); print F "$count"; close(F); print "content-type:text/html\n\n"; print "<body bgcolor=black topmargin=0 leftmargin=0 bottommargin=0 rightmargin=0>\n"; print "<font color=lightgrey size=2><p align=center>ポイント <b>$count</b><br>\n"; print "このページに共感した人は、<br>好きなだけ<a href=count.cgi target=count>ここ</a>を押してください。"; print "</p></font></body>\n";

    • 締切済み
    • CGI
  • 動的ハッシュを作って取り出したいのですが・・・

    お世話になります。 フォームから送られてくるデータを動的に作ったハッシュで参照出来るように取り組んでるんですが、思ったように出来ず思い悩んでおります。 どうすれば、意図した形でデータを取り出すことが出来ますでしょうか 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
  • エクセルで同じ値をカウントアップする

    エクセルで特定列の同じ値をカウントアップする方法を教えていただけないでしょうか? 以下のように、A列にはランダムに値が入力されていて、 B列に同じ値の個数をカウントアップしたいと思っています。 A|B --|-- AA|1 AB|1 BD|1 BD|2 AA|2 FG|1 AA|3   

  • 行単位のデータ比較とカウントアップ方法について

    皆様のお知恵を拝借したく投稿しました。 よろしくお願いします。 perlでのデータ処理で2つの入力ファイルがあります list1 list2 ----------------- ------------------ start end start end 1 10 6 8 12 16 7 14 20 30 35 39 34 42 41 47 80 89 110 130 ----------------- ------------------ この2つのファイルを比較して以下の処理を行ないます (1)list1から見たlist2の1行目を比較し、領域の重複が見られたら両方にフラグを立てる →この場合領域6 - 8で重複が見られる (2)両方の終点を比較し、終点値の小さい方をカウントアップ(次の行へ進む) →1行目の場合、list2の終点が小さいのでlist2の行を進める (3)list1の1行目とlist2の2行目を比較する (4)終点を比較して終点の小さい方の行をカウントアップする →以下(1)~(4)の行程を繰り返す。 (5)上例を比較の流れは以下のとおりになります list1 1-10 , list2 6-8 list1 1-10 , list2 7-14 list1 12-16 , list2 7-14 list1 12-16 , list2 35-39 list1 20-30 , list2 35-39 list1 34-42 , list2 35-39 list1 34-42 , list2 41-47 list1 80-89 , list2 41-47 list1 110-130 , list2 41-47(行数が足りなくなったらlist2の最後の行と比較する) 最終的にlist1,list2の重複のあるフラグ数をカウント、出力する と言うアルゴリズムです コーディングの流れとしては (1)双方の二次元配列をループで回す (2)始点に注目して重複がないか比較する (3)終点を比較して該当するリストの行数のカウントアップをする というふうになると思うのですが、 (3)のやり方と、最後の片方のリストの行数が足りなくなったときの 比較とカウントアップのやり方がよく実装できません これをperlでコーディングしたいのですが どのようにしたらよいのでしょうか? ご助言いただけますと幸いです

    • ベストアンサー
    • Perl
  • カウントについて

    エクセルをつかってカウント処理を考えています. どなたかアドバイス頂けないでしょうか。 下記のような表があります. 例えば、セルA1~3まで100とあり、セルA4~5まで400とセルA1~3とセルA4~5の数値はおなじです。3行分だったり2行分だったりと不規則コードが下に続いていきますが,まとまった数値になります. そのA列の同じコード番号全てに対して、B列にカウント数を入力したいのです。 B列のカウント数入力箇所は、セルA1~3までだとするとセルB3に最大値のカウント数がくるようにしたいのです。 コード  カウント数      100              100               100      3        200               200      2        500               500               500               500      4