プロが教える店舗&オフィスのセキュリティ対策術

はじめまして
Perl初心者です。
どうかご教示お願い致します。

20,a,12,34
19,a,12,34
18,a,12,34
17,a,12,34
16,a,12,34
15,a,12,34
14,a,12,34
13,a,12,34
12,asa,12,34
11,a,12,34
10,sasaa,12,34
9,a,12,34
8,asa,test,34asa
7,a,12,34
6,a,12,34
5,a,20,34
4,a,12,34
3,a,12,34
2,a,12,34
1,a,12,34

このようなCSVファイルがあり
1列目が「asa] 2列目が[test]
が一致する、3列目[34asa]を抽出させたいのですが

どのようにするのでしょうか?

A 回答 (6件)

> どのように対処すればいいのでしょう・・・?



正規表現を理解されている前提で回答していましたが
そうでもないのでしょうか?

文字列=~/パターン/
のような処理になります。
Perlと言えば正規表現は避けて通れないでしょうから、
一度時間をとって学習されるとよろしいかと
    • good
    • 0
この回答へのお礼

そういうことですか!
まだまだ勉強不足ですね・・・

正規表現もまだしっかり理解はできておりません・・・
変換やパターンマッチは、なんとなくわかってきた程度です;;

お礼日時:2017/09/20 13:00

マッチした回数を覚えておきます。


最後にマッチ件数が0なら、ないと表示します。

$ctr = 0;
while(<>){
@elm = split(/,/);
if ($elm[1] eq 'asa' && $elm[2] eq 'test'){
print $elm[3],"\n";
$ctr++;
}
}
if($ctr ==0){
print "検索結果はありません";
}
    • good
    • 0
この回答へのお礼

ありがとうございました!
実現出来ました!

お礼日時:2017/09/20 13:00

1行をsplitで分割し1列目と2列目を比較すればよいかと。


while(<>){
@elm = split(/,/);
if ($elm[1] eq 'asa' && $elm[2] eq 'test'){
print $elm[3],"\n";
}
}
    • good
    • 0
この回答へのお礼

表示させることができました!

もう1つ教えてほしいです。
もし、テキストにそれらが該当しない場合
elsif($elm[1] ne 'asa' || $elm[2] ne 'test'){
print "検索結果はありません";
}

このようにもしたいのですが、これをifの後ろに入れて実行すると
検索結果はありませんが大量に表示されてしまいます。
どのように対処すればいいのでしょう・・・?

お礼日時:2017/09/20 12:46

> 1列目と3列目をヒットさせ、2列目を抽出



/(?<=,asa,).+(?=,34asa)/
    • good
    • 0
この回答へのお礼

そのようにもできるのですね・・・
しかし、どのように扱えば・・・;;

お礼日時:2017/09/20 12:48

提示された例では


8,asa,test,34asa
がそれに該当するように見えますが、
そうすると、

2列目が「asa] 3列目が[test]
が一致する、4列目[34asa]を抽出

ではないでしょうか。
(最初の列を0列目と表現するなら、あなたの表現で合っています)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
最初の列は0です!

お礼日時:2017/09/20 12:03

>1列目が「asa] 2列目が[test]


>が一致する、3列目[34asa]

一番左の列は0列目という意味でしょうか?
また列は4列固定で増減することはないでしょうか?
セパレータの「,」は特殊な条件で文字列としてつかうことはないですか?

上記条件がクリアになるならざっくり・・・
/(?<=,asa,test,).+/
でヒットさせればよいかと思います
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます;;
1番左は0です!
「,」などの記号系は、入力しない(入力させないよう)にしております
yambejp様がご掲示くださった/(?<=,asa,test,).+/
では、1列目と2列目のみヒットなのですが、
1列目と3列目をヒットさせ、2列目を抽出という形もしたいです・・

お礼日時:2017/09/20 12:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!