在perl中解析制表符分隔文件

时间:2013-10-09 14:08:30

标签: perl parsing tabs tab-delimited-text

所以我是一个巨大的perl新手,但我正在尝试将制表符分隔文件解析为数组。 我唯一的问题是我的文件有不同数量的标签用于间距。

现在我正在做@data = split("\t");,但这只删除了一个标签,有没有办法在解析文件时删除所有标签?

3 个答案:

答案 0 :(得分:3)

您可以拆分正则表达式,因此如果您需要拆分一个或多个标签字符,请使用:

@data = split("\t+");

示例(Perl调试器):

DB<1> $text = "one\ttwo\t\tthree\t\t\tfour"

DB<2> @data = split("\t+", $text)

DB<3> print join(", ", @data)
one, two, three, four

答案 1 :(得分:2)

在split()

之前,只需在整个字符串中使用单个标签替换多个标签
# A line with varying numbers of tabs
my $line="\t\tField1\tField2\t\t\t\t\tField3";

# Replace all occurences of one or more tabs with single tab
$line =~ s/\t+/\t/g;

# Now split()

答案 2 :(得分:0)

你可以这样做

#!/usr/bin/perl
use strict;
use warnings;

open (IN, '<' , 'tabsfile');
my @arr;

while(<IN>) {
        $_ =~ s/\s+/ /g;
        push @arr, $_;
}
close(IN);

输出:

]# cat tabsfile
lkjdlksajdlkajsd                kdjlkasjd                                ;lkwqd;wqd;qwkd;qwkd
                lkewjflkjewflewjflwjf                   lkewjflkejflewjf
djflkajfdljf    eljfdlewfjlewfj lkfjewlfkjewlkf lkdjewflkjewlkfjlkewjfew        dlkejfdlkjewflkjewlkfjjdlkajdflkjalfdjelfj
        dkjklfjldskjfldsjf lkjdslkfjdslkjf:wq

]# perl tabs.pl
lkjdlksajdlkajsd kdjlkasjd ;lkwqd;wqd;qwkd;qwkd  lkewjflkjewflewjflwjf lkewjflkejflewjf djflkajfdljf eljfdlewfjlewfj lkfjewlfkjewlkf lkdjewflkjewlkfjlkewjfew dlkejfdlkjewflkjewlkfjjdlkajdflkjalfdjelfj  dkjklfjldskjfldsjf lkjdslkfjdslkjf:wq 
]#

您可以在正则表达式中选择要替换\t \s的内容。