2

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

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

4

3 回答 3

4

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

@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
于 2013-10-09T14:11:20.670 回答
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()
于 2013-10-09T14:21:45.430 回答
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的内容。

于 2013-10-09T15:07:49.080 回答