こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

該当項目表示について

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番目も含める為にはどのようにすればよいのでしょうか?
ご教授お願いいたします。

投稿日時 - 2007-01-28 12:33:48

QNo.2702712

困ってます

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

$T[2] では駄目なのでしょうか?

> 3番目の項目(上記例ではccc、ddd)を
> 1、2番目の項目に該当させる


すみませんがよくわからなかったので、他人が見てもわかりやすいように、もっと具体的に解説していただけませんでしょうか。

投稿日時 - 2007-01-28 21:37:12

お礼

ご回答ありがとうございます。

T[2] にして、3項目を該当させるコードを付け足し解決することができました。
ありがとうございました。

投稿日時 - 2007-01-28 22:46:40

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

配列を扱う場合には、添え字を使わないほうがコードが分かり易いです。
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 => $_ }
}

投稿日時 - 2007-01-28 21:55:07

お礼

ご回答ありがとうございます。
回答いただきましたコード、勉強になります。
添え字を使わない方法は確かに分かり易いですね。
参考にさせていただきます。
ありがとうございました。

投稿日時 - 2007-01-28 22:55:33

あなたにオススメの質問