我正在嘗試使用Text::CSV
Perl模塊來解析製表符分隔的文件。使用Text :: CSV解析Perl中的製表符分隔文件
我試圖解析的文件是:
#IGNORE COLUMN1 COLUMN2 COLUMN3 COLUMN4
ROW1 x y z a
ROW2 b c d
ROW3 w
注意該文件是製表符分隔。該文件可能有N
列和N
行。此外,在ROW2
的情況下,它有第四個選項卡,但沒有值。在COLUMN1
的w
值之後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);
如果你能同時擁有空字段(多個標籤成一排)和不存在的字段(線過早結束),你會算空字段一樣的非-existent? – TLP
@TLP是的。基本上,一行可能有多個選項卡,其值爲「空白」(例如,在'ROW2'中,'COLUMN4'具有「空白」選項卡值或該行可能過早結束,就像在'ROW3'中那樣沒有字符'COLUMN1'中的'w'後 – user2402135
使用'sep_char =>「\ t」'作爲''t''使得分隔符字面意思是'\ t'而不是製表符 – Kenosis