CSV ファイルに大量のデータがあります。最初の行はすべて文字列 (すべてのテキストとアンダースコア) であり、後続のすべての行はその文字列に関連する数字で埋められています。
最初の行を解析して特定の文字列を見つけ、その文字列がどの列にあったかを覚えてから、ファイルの残りの部分を調べて、同じ列のデータを取得しようとしています。これを 3 つの文字列に対して行う必要があります。
私は Text::CSV を使用してきましたが、最初の行で文字列を見つけて次の行に移動し、同じ列からデータを取得するまでカウンターをインクリメントする方法がわかりません。などこれまでに試したことは次のとおりです。
while (<CSV>) {
if ($csv->parse($data)) {
my @field = $csv->fields;
my $count = 0;
for $column (@field) {
print ++$count, " => ", $column, "\n";
}
} else {
my $err = $csv->error_input;
print "Failed to parse line: $err";
}
}
$data は 1 行目にあるため、"1 $data" を 25 回 (CSV ファイルの行数) 表示します。$data が見つかった列を覚えさせるにはどうすればよいですか? また、すべての文字列が 1 行目にあることがわかっているので、1 行目だけを解析し、@data 内のすべての文字列を見つけてから、ファイルの残りを解析し、必要な部分からデータを取得するにはどうすればよいですか?列とそれを行列または配列の配列に入れますか?
助けてくれてありがとう!
編集:質問の言い回しが少し不十分であることに気付きました。CSVから列番号を取得する方法がわかりません。これはどのように行われますか?
また、列番号を取得したら、後続の行を実行してその列のみからデータを取得するように CSV に指示するにはどうすればよいですか?