• ベストアンサー

文字認識について

perlでプログラムを書いています。 配列の中にもし"<"があったらif文に入るってしたいのですが、 for(省略){ if(@配列[i] eq"<"){ としても、 if(@配列[i] eq"\<"){ としても、 if文の中に入れません。これは何故でしょうか? また、"//"とスラッシュが2回続いた時も同様にif文に入りたいのですが、これも方法を教えてください。 よろしくお願いします。

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

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

  • ベストアンサー
回答No.3

行末に「\n」がついてるからではないですか? for(省略){ chomp $配列[$i]; if($配列[$i] eq '<'){ か for(省略){ if($配列[$i] =~ /</){ でできると思いますよ。

wawawawawa
質問者

お礼

if($配列[$i] =~ /</){ でできました!!ありがとうございました!!

その他の回答 (2)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.2

#1です。見落としてました。 >if($配列[i] eq"<"){ if($配列[$i] eq"<"){ i にも$が必要ですね。

wawawawawa
質問者

お礼

質問するときに$を書くのを忘れていました。ご指摘ありがとうございました。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

>if(@配列[i] eq"<"){ if($配列[i] eq"<"){ 配列内の要素を参照する時は$です。

関連するQ&A

  • 文字認識について教えてください

    perlでプログラムを書いています。 配列に//と連続で入っているとき、 (例えばa[0]=a,a[1]=b,a[2]=/,a[3]=/,a[4]=c,a[5]=/,a[6]=d) $count=@a for($i=0;$i<$count;$i++){ if(@a[$i] eq"/"){ 省略 } } とやると、a[3]とa[5]ではifの中に入るのに、a[2]では入りません。 これはどうしてでしょうか? 教えてください。

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

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

  • プログラムの課題で分からない問題があるので、ヒントを教えていただきたい

    プログラムの課題で分からない問題があるので、ヒントを教えていただきたいのです。 ちなみにfor文、if文、配列などを応用して(勿論ぜんぶ使わなくても良いです)プログラムをつくるものなのですが、配列をうまく理解してないので、どういう風に配列に代入して出力するかアドバイスお願いします。 ・キーボードから入力した2つの文字列(8文字以内)を比較して、同じときには○、異なるときは×と表示する int main(void) { char str[8]; int i,n,na; for (i=0;str1[i]= =str2[i];i++){ if (str1[i]= ='\0'){ n=1; }break; } というトコまでは何とか分かるのですが…

  • Perlプログラムにおいて、入力されたパスワードをif文で比較させたい

    Perlプログラムにおいて、入力されたパスワードをif文で比較させたい。 今、Perlプログラムを使ってホームページでクイズを作成中です。 そこで、教えて頂きたいのですが、ホームページに入れる人は、事前に通知した人にのみで、パスワード入力をしてもらう方式にしたいと思っています。 パスワードも一人一人に違うものではなく、3種類程度を考えています。 Perlプログラムの中に if ($passwd eq '1234') 程度に考えています。 でも、Perlプログラムソースを見られたら一目瞭然で判ってしまいます。 プロバイダはniftyで、index.cgiのファイル名にします。 基本的な質問で恐縮ですが、もっと良い方法、注意しないといけない点、などを教えて下さい。

    • ベストアンサー
    • Perl
  • Javaのプログラムをルビー言語に。

    10~50までの素数が格納されている配列を rubyで作りたいのですが、どのようにすればいいいのかよくわかりません。 下のプログラムにも間違いがあるかもしれませんので もしありましたご指摘お願い致します。 for i=start i<=end i++;//iは割られる数 for(j=1;j<=i;j++){//jは割る数 if(i%j==0){ count++; } } if(count==2){ System.out.println(i); } iをjで割っていき、余りが0になったらカウントを増やしていくプログラムです。 素数は1とその数字でしか割れないので、カウントは2になり、 それを配列に格納したいのですが、ここではただ表示するだけに留まってしまっています。 まだruby初心者で分からないことだらけですので、 簡単な方法ではなく、出来ればfor文を使用したやり方で教えていただけると 幸いです。 よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • Perlで早いプログラムを作りたい

    perlの初心者です。 一つの配列の構成要素が100~1000のものが1000個ほどあります。 ある配列の一つの要素が他の配列に何個づつあるかを調べています。 作ったプログラムは次の三つですがとても遅く、もっと早い方法があれば 教えてください。 1.foreach $a(@hairetsu1){     $n=0;     foreach $b(@hairetsu2){       $n++ if $a =~ $b;     }   } 2. foreach $a(@hairetsu1){     $n=grep(/$a/,@hairetsu2);  } 3. for($i=0;$i<length(@hairetsu1);$i++){    $n=0;    for($j=0;$j<length(@hairetsu2);$j++)      $n++ if $hairetsu1($i) =~ $hairetsu2($j);    }  } 上が一番早く下に行くほど遅いですがあまり違いはありません。 よろしくお願いします。

  • 文字列の条件判定

    配列の中身が"00"~"10"でなかったらerrorを出力するプログラムを作りたいです。 以下のようなプログラムを書くと、"20"や"-4"などには対応できるのですが、 英語が入るとエラーが出ません("a0"とか)。また、("22c")などもエラーが出ません。 なぜなんでしょう?そしてどうやって書けばいいのでしょうか・・・。 for( $i = 0 ; $i <= $#array ; $i++ ){    if( ($array[$i] < "00" ) || ( $array[$i] > "10" ) ){       print "$array[$i]\n";       print "error\n";    } }

    • ベストアンサー
    • Perl
  • 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で配列に設定した値が関数に引き継がれない。

    レンタルサーバ上でPerlのプログラムを作成しているの ですが、動作でよくわからないことがあるので、教えてください。 Perlのプログラムがあるサーバで動作していて、それを 他のサーバに移したのですが、正しく動作しなくなりました。 調べてみると、関数を呼んでいるところで配列の値がうまく 引き継がれていませんでした。 呼び出しの処理は次の通りです。 ●呼び出し元 ret= &SubModule(*DATA1); ●呼び出し先 sub SubModule { local(*DATA1) = @_ if @_; while(($key, $value) = each(%DATA1)) { #配列に対する処理 } #以下省略 このような処理の時に呼び出し元では配列DATA1に 値が入っているのに呼び出し先のSubModuleでは 空になりwhile文を素通りして「#配列に対する処理」 を実行しません。 いろいろ試しているうちに、呼び出し先に1つ余計な whileを入れると配列DATA1に値が入ってきました。 つまり次のように変更すると、うまくいきました。 呼び出し先 sub SubModule { local(*DATA1) = @_ if @_; while(($key, $value) = each(%DATA1)) { } while(($key, $value) = each(%DATA1)) { #配列に対する処理 } #以下省略 こうすると 「#配列に対する処理」が実行されました。 教えていただきたいのは以下の2点です。 (1)元のサーバでは問題なく動作していたのですが、  別のサーバでは、配列の引数がうまく引き継がれ  なくなりました。どういう原因が考えられるでしょうか。  処理上何かまずいところがあるのでしょうか。 (2)呼び出し先でwhile文を一つ入れることで、配列の  値が参照できるようになったのですが、これは  なぜでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 曲線グラフからピーク値を求める方法

    VB6のプログラムでちょっとつまづいているのでどなたか分かる方いらっしゃいましたら助言お願いいたします。 今、sinカーブのような曲線があるとします。 このsinカーブの極大値、極小値をもとめたいんですが; 微分を使わずに簡単に行ういい方法ってないでしょうか? ちなみに自分は y座標方向のデータをyy(800)の配列にすべてのデータを入れておいて yの最大値をymax(50)のように配列しておき 範囲を手入力で指定し、for 文でループさせ、その中に条件式を書いて 求めています。実際にはこんな感じです。 これは最大値をもとめるときのものです ymax(0)=0  for i= 0 to 800 if ymax(0)<y(i) then yymax(0)=y(i) end if next i というような簡単な並べ替えでやっています。 範囲指定をせずこのような並べ替えの方法でうまく求める方法ってないものでしょうか? 長々とかいてしまいましたがどなたか分かる方いらっしゃいましたら よろしくお願いします。