要求
问题: 我可以使用这些条件来改进读取过程吗?如果是这样,我怎么能用Perl做到这一点?
我在你的答案中需要一个例子(Perl Script).
sin*_*ish 13
这是一个解决方案:
#!/usr/bin/env perl
use warnings;
use strict;
use Text::CSV_XS;
use autodie;
my $csv = Text::CSV_XS->new();
open my $FH, "<", "file.txt";
while (<$FH>) {
$csv->parse($_);
my @fields = $csv->fields;
next unless $fields[1] =~ /something I want/;
# do the stuff to the fields you want here
}
Run Code Online (Sandbox Code Playgroud)
你的a)问题已经回答了几次,但b)尚未得到解决:
我不需要所有记录,我的意思是,我们可以使用一些条件,例如,如果第3个CSV列内容为"XXXX"且第4列为"999".我可以使用这些条件来改善读取过程吗?
不会.你怎么知道第三个CSV列是否包含'XXXX'或者第四个是'999'而没有先读取该行?(DBD :: CSV允许您将其隐藏在SQL WHILE子句后面,但是,因为CSV是未编制索引的数据,所以它仍然需要读取每一行以确定哪个匹配条件,哪个不匹配.)
几乎可以使用行的内容来跳过读取部分文件的唯一方法是,如果它包含告诉您的信息1)"跳过此行后面的部分"和2)"继续读取字节偏移量nnn" .