我正在创建一个子程序:
(1)解析CSV文件;
(2)并检查该文件中的所有行是否具有预期的列数.如果列数无效,则会出现问题.
如果行数从数千到数百万不等,您认为最有效的方法是什么?
现在,我正在尝试这些实现.
(1)基本文件解析器
open my $in_fh, '<', $file or
croak "Cannot open '$file': $OS_ERROR";
my $row_no = 0;
while ( my $row = <$in_fh> ) {
my @values = split (q{,}, $row);
++$row_no;
if ( scalar @values < $min_cols_no ) {
croak "Invalid file format. File '$file' does not have '$min_cols_no' columns in line '$row_no'.";
}
}
close $in_fh
or croak "Cannot close '$file': $OS_ERROR";
Run Code Online (Sandbox Code Playgroud)
(2)使用Text :: CSV_XS(bind_columns和csv-> getline)
my $csv = Text::CSV_XS->new () …
Run Code Online (Sandbox Code Playgroud)