
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番目も含める為にはどのようにすればよいのでしょうか?
ご教授お願いいたします。
No.1ベストアンサー
- 回答日時:
$T[2] では駄目なのでしょうか?
> 3番目の項目(上記例ではccc、ddd)を
> 1、2番目の項目に該当させる
すみませんがよくわからなかったので、他人が見てもわかりやすいように、もっと具体的に解説していただけませんでしょうか。
ご回答ありがとうございます。
T[2] にして、3項目を該当させるコードを付け足し解決することができました。
ありがとうございました。
No.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 => $_ }
}
ご回答ありがとうございます。
回答いただきましたコード、勉強になります。
添え字を使わない方法は確かに分かり易いですね。
参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Strawberry Perl for Windows ...
-
INDIRECT 横に再度抽出したい
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
perlで2次元配列をサブルーチ...
-
Perlの全角スペース 文字化け?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0でMSChartをタイマーを使...
-
matlabで、平均値を求める方法...
-
MSDOSからワイルドカード指定で...
-
VBA エクセルで1列で表示したい。
-
perlでカンマ区切り(CSV)デー...
-
複数のCSVを一度にダウンロード
-
perlで重複をさせない処理
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
stable diffusionのエラー
-
Excel 1セル当りの文字数が2...
-
「1TB」のHDDに日本語は何字入...
-
DataGridViewの特定列に入力さ...
-
ピクセル,dpiから容量(バイト...
-
Excel VBA メール作成について ...
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
ListView重複データ削除
おすすめ情報