重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

A 回答 (2件)

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



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


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

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

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

お礼日時:2007/01/28 22:46

配列を扱う場合には、添え字を使わないほうがコードが分かり易いです。


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 => $_ }
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/28 22:55

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