我正在尝试使用Text::CSV
Perl模块来解析制表符分隔的文件。
我要解析的文件是:
#IGNORE COLUMN1 COLUMN2 COLUMN3 COLUMN4
ROW1 x y z a
ROW2 b c d
ROW3 w
请注意,文件是用制表符分隔的。该文件可能有
N
列和N
行。此外,在ROW2
的情况下,它有第四个制表符但没有值。对于COLUMN1
的值之后,ROW3
没有制表符。也就是说,某些列可能具有未定义的值或空值。到目前为止,我已经开始编写Perl脚本,但在尝试弄清楚如何编写代码回答以下问题时遇到了困难:
找出有多少
ROWn
。然后对于每个COLUMNn
,检查是否有ROWn
的值。因此,在这种情况下,COLUMN2
、COLUMN3
和COLUMN4
将有缺失值。任何提示和指导都会有所帮助(我是Perl新手)。我已经查看了CPAN Text::CSV页面,但我还没有能够解决这个问题。
#!/usr/bin/perl
use warnings;
use strict;
use v5.12;
use Text::CSV;
my $csv = Text::CSV->new ({
escape_char => '"',
sep_char => '\t',
eol => $\,
binary => 1,
blank_is_undef => 1,
empty_is_undef => 1,
});
open (my $file, "<", "tabfile.txt") or die "cannot open: $!";
while (my $row = $csv->getline ($file)) {
say @$row[0];
}
close($file);
ROW2
中,COLUMN4
具有“空”选项卡值,或者该行可能会过早结束,就像在ROW3
中一样,在COLUMN1
中的w
后面没有字符。 - user2402135sep_char => "\t"
,因为'\t'
会将分隔符字面上解释为\t
而不是制表符。 - Kenosis$row
的元素数量吗?还是不知道如何比较空值和未定义值? - TLP$\
(输出记录分隔符,默认为 undef),而是$ /
(输入记录分隔符,默认为换行符)。 - TLP