poppo64のプロフィール
- ベストアンサー数
- 11
- ベストアンサー率
- 57%
- お礼率
- 72%
- 登録日2005/03/04
- [Perl]長すぎるif文を簡単にしたい
初めまして、説明がうまく伝わらないかもしれませんがよろしくお願いいたします。 同じ値がN回続いた場合、その値をすべて出力するPerlのプログラムを作成中なのですが とても長くなってしまい、スッキリとしたプログラムにしたいのです。 どうかお知恵を貸していただけないでしょうか。 現在、&&を使用してこのようになっています。 例:Aの値が5回連続して同じ値だった場合 for($i=1; $i<=1000; $i++){ if(@A[$i]==@A[$i+1] && @A[$i+1]==@A[$i+2] && @A[$i+2]==@A[$i+3] && @A[$i+3]==@A[$i+4]){ for($j=0; $j<=9; $j++){ printf "@A[$i+$j], @B[$i+$j], @C[$i+$j]"; } } } データはすべて数値で、スペース区切りのテキストデータです。 # ヘッダー 0.00 2.0 11.5 0.01 6.3 17.2 0.01 2.1 14.2 0.01 1.2 14.3 0.01 2.1 14.3 0.01 3.7 14.3 0.01 3.7 14.3 0.01 4.1 14.3 0.06 4.1 14.3 0.01 4.1 14.9 0.01 4.1 14.9 0.03 4.1 14.8 ・・・ 連続した値が50回、100回だった場合になるとif文の条件式が長くなってしまい その都度変更がとても大変になってしまい困っています。 どうか、よろしくお願いいたします。
- ベストアンサー
- Perl
- Lena_River
- 回答数7
- perl xml解析について
perl初心者です。 以下のxmlデータの「http://www.google.co.jp」をxml解析して値を取得したいのですが、 どのようなプログラムを記述すればよろしいのでしょうか? <?xml version="1.0" encoding="x-sjis-cp932" ?> <Res_result> <result result="1" /> <result redirect="http://www.google.co.jp" /> </Res_result> いろいろ試してみましたが、どうもうまくいきません。 ちなみにサーバーにインストールされているxml関連のモジュールが XML::Simple XML::Parser となります。 ご教授の方、宜しくお願い致します。
- サブルーチンやif分以外での中括弧
perlについて学習中で、現在フリーのスクリプトを見て勉強しております。 中括弧の使い方を教えて欲しいです。 sub test { print"OK"; } if ($test>1) { print"OK"; }else{ print"NG";} 上記のようにサブルーチンやif文での使い方は分かるのですが、フリーのスクリプトの中に単に中括弧を使用している部分がありました。 例) { ←この括弧 my(@new); for(0..3){if($tmp[$_]=~/jpg/){push(@new,$tmp[$_]);}} } 矢印の部分の部分の括弧ですが、これはどのような意味があるのでしょうか? よろしくお願いします。
- 正規表現の達人にお聞きしたい。
正規表現で、文字数は4文字ですが、そのうち1つでもaがあれば マッチするということで、1~3まではマッチし、 4はa無しなのでマッチせず、5は4文字でないのでマッチしない ような正規表現は書くことは可能でしょうか? 1) aaaa 2) ajjj 3) kaoa 4) jjjj 5) axxxx
- perlで配列を複数行削除したいのですが
@UserDataNum=qw(11 13 34) @PDataLinesの中身 1<>タイトル<>2009/02/10<>適当なデータ<>適当なデータ2<> 2<>タイトル2<>2009/03/13<>適当なデータ<>適当なデータ2<> .. 50<>タイトル3<>2009/03/23<>適当なデータ<>適当なデータ2<> $TODAY=今日の時間; foreach(0..$#PDataLines){ my@aaa= split(/<>/,$PDataLines[$_]); my$a2 = $aaa[2];$a2 =~s{/}{}g; #ここの処理で@UserDataNumに入っている数字と一致する$aaa[0]を含む行を除外し、時間が今日以降のものを配列@Arrayに入れたいのです if(($aaa[0] !~ /@UserDataNum/) && ( $TODAY < $a2)){ push(@Array,$PDataLines[$_]); } } print "\@Array=@Array"; if(grep(!/@UserDataNum/, @PDataLines) && ( $TODAY2 < $a2)){ としてみたり試みているのですが、思うように出来ずにいます。 どなた様かご教授願えませんでしょうか 宜しくお願い致します。