• ベストアンサー

if文条件式で配列を使用したい

if文条件式で配列を使用したい 例えば open (FH, "<data.dat"); @list = <FH>; で不確定要素数を@listに格納したあと if文でその@list内でマッチングする物があればそれだけ表示させたいのですが #ここでは比較対象をabcとして foreach(@list){ if( abc eq @list){ } } としてもtrue処理が出来ません。 どの用に条件を書けばよいのでしょうか?

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

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

質問にあるプログラムを生かすなら foreach my $i (@list) { if( $i =~ /abc/ ){ print $i } } grep関数を使って foreach my $i ( grep (/abc/ , @list) ) { print $i }

popepon
質問者

お礼

参考になりました 有難う御座います

関連するQ&A

  • if elsif 構文と複数の配列の使用

    if elsif の構文で、複数の配列を使ったマッチングで分からないところがあり、質問させていただきたいと思います。 たとえば通常ifを使って$_ に対してある配列すべての要素をマッチングさせるとすると、 foreach my $value (@list){ if($_ =~ /$value/ ){ do something}} となると思います。 私が書きたいスクリプトは以下のようなものです。 $_ にたいして、初め (if で)配列1のすべての要素を探し、それがなかったら(elsif)配列2のなかから探し、それでもなければ配列3の中から。。。。。。というものです。 foreach my $value1 (@list1){ if($_ =~ /$value1/ ){ do something} elsif {foreach my $value2 (@list2){ if($_ =~ /$value1/ ){ do something}} 感覚的にはこのような感じになると思うのですが。。。。 このelsifの部分から2つめの配列を使ったマッチングを行いたいのですが、elsif ( )のなかにどのように記述すれば 動く様になるでしょうか?

    • ベストアンサー
    • Perl
  • ifの条件式 !について

    以下処理があります。 1.宣言、初期化 var A = new Array(); A[1] = A[2] = A[3] = false; 2.条件判断 if(!A[1] && !A[2] && !A[3]){ A[1] = $A[2] = A[3] = true; }else{ 処理 } } 質問:宣言⇒ifに処理が流れた時、条件式の内容は ・A[1]の否定⇒A1は、falseが格納されているので、否定でtrue。 ・A[2]の否定⇒A1は、falseが格納されているので、否定でtrue。 ・A[3]の否定⇒A1は、falseが格納されているので、否定でtrue。 よって、 if(true && true && true){ A[1] = $A[2] = A[3] = true; } で結果、配列の1~3は、全てfalseから、trueに変更されるという考えで間違っていないでしょうか? よろしくお願いします。

  • if文の条件式について

    ASPのIf文の条件として varDateというある日付の入った変数を システム日付プラス1日より過去のものはtrueという 条件をつくりたいのですが、どう記述すればよろしいでしょうか? よろしくお願い致します。

  • if文の判定条件に配列

    2次元配列(ここではa[M][N]とします)の値が全て0の時にだけある文章を実行したいのですが、 if(for(i=0; i<M; i++){ for(j=0; j<N; j++) map[i][j] == 0; }){ (実行したい文) } という文をコンパイルしたところエラーが出てしまいました。 if文の判定条件中にfor文は使えないのでしょうか? 使えないのであれば、別の書き方を教えて戴けると嬉しいです。よろしくお願いします。

  • PerlでIF文の条件式をもっとスマートに書きたい

    PerlでIF文の条件式をもっとスマートに書きたいのですが。。。 以下のようなIF文の条件式を上手く書く方法がありますでしょうか? if($flg[0] == 1 || $flg[1] == 1 || $flg[2] == 1 || $flg[3] == 1 || $flg[4] == 1 || $flg[5] == 1 || $flg[6] == 1 || $flg[7] == 1 || $flg[8] == 1 || $flg[9] == 1)){ $flg[i]は配列@flgの各要素です。 上記のように「||」(論理和:または)でつないで書くのではなく、 もっとスマートに書きたいのですが、 何か良い方法はないでしょうか?? ご存じの方がいらっしゃいましたら、どうかご教示ください。 よろしくお願い致します。

  • Rubyで配列を使ったfor文の中に条件つきif文

    Rubyで配列を使ったfor文の中に条件付きのif文を入れてループさせたいのですが、基本的な構文が分かりません。 for i in array     if i == 9       array[i] << 'ア'     end end という雰囲気で書きたいのですが、どうしたらよいでしょうか。 i番目のループまで、配列のarrayを走査するにはどうすればよいでしょうか。 基礎的な質問ですみません。よろしくお願いします。

  • if文の判定条件('||'と'&&'の使い方)

    ○if文の判定条件への理解が弱いため、下記プログラムを作成し、 疑問があったため、質問をしたいと思っております。 #include<stdio.h> #include<string.h> int main() { char moji[]= "A"; /***********************************************************/ if( 0 != strcmp( moji , "A" ) || strcmp( moji , "B" ) ) ^^(1) /***********************************************************/ { printf( "文字不一致" ); } else { printf( "文字一致" ); } return (0); } ○質問 「/*/」で囲ったif文の判定箇所になりますが、 この判定条件は"配列mojiに格納されている値が"A",または"B"以外の" ときに、画面上に「文字不一致」を出力します。そうでなければ 「文字一致」を出力します。 今回、配列mojiには"A"が格納されており、「文字一致」が画面に 出力されるはずですが、「文字不一致」が出力されてしまいます。 判定条件が誤っていると思い、色々と試したところ、(1)の箇所を 「&&」にしたときに、「文字不一致」が出力されます。 「||」(論理和)と「&&」(論理積)が理解できていないと思われ、 この部分を交えて、何故「&&」にしないと「画面不一致」と出力 されないのかを、ご教授の程お願い致します。

  • if文における複数条件の簡略化

    はじめまして。 Perlを勉強中の者です。 if文中における複数の条件に関する質問があるのでお願いいたします。 if文中における条件が複数ある場合に条件を簡素化することは可能でしょうか。 下記がただ今作成しているプログラムの一部なのですが、2つ目のif文中には10通りの条件があります。同一のプログラム内に同じ条件をもつif文が他数箇所あるので何か良い解決方法を探しております。 サブルーチンも考えたのですが、どのようにif文の条件として用いてよいのかわからないため、ご教授お願いいたします。 if ($code eq $codetwo){ if ((($code eq 'i')&&($F1mean<900)&&(1600<$F2mean)&&($F2mean<3100))| (($code eq 'y')&&($F1mean<900)&&(1400<$F2mean)&&($F2mean<2800))| (($code eq 'e')&&($F1mean<900)&&(1400<$F2mean)&&($F2mean<3000))| (($code eq 'E')&&($F1mean<1100)&&(1400<$F2mean)&&($F2mean<2700))| (($code eq 'a')&&($F1mean<1100)&&(900<$F2mean)&&($F2mean<2300))| (($code eq 'x')&&($F1mean<1100)&&(800<$F2mean)&&($F2mean<2400))| (($code eq 'X')&&($F1mean<1000)&&(700<$F2mean)&&($F2mean<2300))| (($code eq 'c')&&($F1mean<1000)&&(600<$F2mean)&&($F2mean<2000))| (($code eq 'o')&&($F1mean<1000)&&(600<$F2mean)&&($F2mean<1600))| (($code eq 'u')&&($F1mean<1000)&&(400<$F2mean)&&($F2mean<1500))){ printf F0123VF "%5.3f %5.3f %s %s %s %s %6.2f (%3.2f) %6.2f (%3.2f) %6.2f (%3.2f) %6.2f (%3.2f) ", $timeBeg, $time, $code, $word, $phctxt, $fileID, $F0mean, $F0ratio, $F1mean, $F1ratio, $F2mean, $F2ratio, $F3mean, $F3ratio; } }

    • ベストアンサー
    • Perl
  • ある条件で一致した場合、配列に代入したい

    foreach(0..$#DataLines){ my@aaa= split(/<>/,$DataLines[$_]); if($FORM{No} eq @aaa[1]){ unshift(@bbb,"$DataLines[$_]"); } } print F "@bbb"; した時に配列@bbbにif($FORM{No} eq @aaa[1]){ で一致した場合、その時の配列を全部@bbbに代入したいのですが、最後のしか入らないようなので、これを全部入れるにはどうすれば良いかご教授願えませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • IF文についておしえてください(EXCEL2003)

    お世話になります。Excel2003です、IF文について教えてください 例えば IF(U21=TRUE,1200) ↑のようなIF文があります。これはいったいどういう意味なのでしょうか? 基本的にIF文は =IF(条件式,値1,値2) という形式だとおもってましたので、これだと、値がたりない。(2つしかカンマで区切られてない。。 それか、U21がTRUEのとき、1200と入力?という意味なのでしょうか? それだと、U21がTRUEとはどういう意味なのでしょうか? よろしくおねがいいたします。

専門家に質問してみよう