- ベストアンサー
該当項目表示について
csvデータの列に%で区切った項目があります。 例) 1行目:aaa%bbb%ccc 2行目:aaa&bbb%ddd 3行目:aaa%bbb 3番目の項目(上記例ではccc、ddd)を 1、2番目の項目に該当させるには以下のスクリプトをどのように 変更すればよろしいのでしょうか? いろいろ調査や変更実行してみましたがうまく動きません。 $find = 0; for($d = 0 ; $d < @TEST ; ++$d) { chomp $TEST[$d]; (@ITEM) = split(/\,/, $TEST[$d]); @T = split(/\%/, @ITEMD[2]); #csvデータ内項目%区切り if($in{'item'} eq @T[0]) { if(($in{'item2'} eq "") or ($in{'item2'} eq "全て")) { @FIND[$find] = $TEST[$d]; $find++; } elsif($in{'item2'} eq @T[1]) { @FIND[$find] = $TEST[$d]; $find++; } } } 上記スクリプトに3番目も含める為にはどのようにすればよいのでしょうか? ご教授お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$T[2] では駄目なのでしょうか? > 3番目の項目(上記例ではccc、ddd)を > 1、2番目の項目に該当させる すみませんがよくわからなかったので、他人が見てもわかりやすいように、もっと具体的に解説していただけませんでしょうか。
その他の回答 (1)
- guci-ok
- ベストアンサー率33% (49/146)
配列を扱う場合には、添え字を使わないほうがコードが分かり易いです。 Perlには、C言語には真似のできない便利な記述法があります。 以下のコードは未確認です。 for (@TEST) { # 各項目は$_へ chomp; # 改行を削除(本当に必要?) my @ITEM = split /,/; # ","はそのまま指定可能、$_は省略可能 my @T = split /%/ => $ITEMD[2]; # csvデータ内項目%区切り # 入力を1つにつなげる # "全て"のときは""と同じ扱いとする my @in; push @in => $in{'item'}, $in{'item2'}, $in{'item3'}, "STOPPER"; my @Tester; push @Tester => @T, "STOPPER"; # ""のときはN番目の項目を指定したことにする my @Temp = @Tester; for (@in) { $_ = "" if $_ eq "全て"; my $Temp1 = shift @Temp; $_ = $Temp1 if $_ eq ""; } # 1つにつなげて比較、一致すれば取り込む my $in_str = join "\t" => @in; my $T_str = join "\t" => @Tester; if ($in_str eq $T_str) { push @FIND => $_ } }
お礼
ご回答ありがとうございます。 回答いただきましたコード、勉強になります。 添え字を使わない方法は確かに分かり易いですね。 参考にさせていただきます。 ありがとうございました。
お礼
ご回答ありがとうございます。 T[2] にして、3項目を該当させるコードを付け足し解決することができました。 ありがとうございました。