我有一个带有模式的CSV文件,如下所示:
split
我需要以下列模式将值保存在名为start_var1 val1 val2
abc 12
xyz 23
end_var1 pqr 32
start_var2 val1 val2
abc1 121
xyz1 232
end_var2 pqr1 341
,var1_arr
的不同数组中:
var2_arr
如果两行之间有任何行,并且每个数组的值分别介于val1(val2)
到start_var
之间,则不应保存空行。
end_var
答案 0 :(得分:1)
根据您的评论,要跳过一行,您可以这样写:
while (my $line = <$fh>)
{
next if ($line =~ /start_var*/);
#do here whatever you want to do
}
答案 1 :(得分:0)
你可以使用Text::CSV_XS。 (那假设你有一个看起来像一个的csv文件,你粘贴的东西看起来像2放在一起)
use strict;
use Text::CSV_XS;
my $csv = Text::CSV_XS->new({binary => 1, auto_diag => 1, sep_char => ' '});
open(my $fh, "<", $filename) or die "$! $filename";
my $skip_heading = 1;
my $col1; # rename as appropriate of course
my $col2;
my $col3;
my @var1_arr;
my @var2_arr;
$csv->bind_columns(\$col1, \$col2, \$col3);
while ($csv->getline($fh)) {
if ($skip_heading == 1) {
$skip_heading = 0;
next;
}
if ($col2 and $col3) {
push(@var1_arr, "$col2($col3)\n");
}
}