所以我是一個巨大的Perl新手,但我試圖解析製表符分隔文件到數組中。 我遇到的唯一問題是我的文件有不同數量的間距標籤。在Perl中解析製表符分隔文件
現在我在做@data = split("\t");
但這隻能刪除一個選項卡,有沒有辦法在解析文件時刪除所有的選項卡?
所以我是一個巨大的Perl新手,但我試圖解析製表符分隔文件到數組中。 我遇到的唯一問題是我的文件有不同數量的間距標籤。在Perl中解析製表符分隔文件
現在我在做@data = split("\t");
但這隻能刪除一個選項卡,有沒有辦法在解析文件時刪除所有的選項卡?
您可以分割的正則表達式,所以如果你需要拆就一個或多個製表符使用:
@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
只需更換在分割之前的整個字符串中帶有單個標籤的多個標籤()
# 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()
你可以去這樣
#!/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
。
你想刪除標籤,還是你想分割字符串?你似乎對你想要做的事感到困惑。 – TLP
另外,'split'\ t「'不會只刪除一個標籤,它會刪除所有的標籤。不過,它會爲連續的標籤創建一個空白字段。 – TLP
不幸的是,不幸的是,這是一個製表符分隔的文件。你不能識別空字段,因爲它們與'\ t'的較長序列不可區分(除了最後一個字段,如果你將split的限制參數設置爲-1,那麼ypu只會是git,即使用@data = split(「\ t +」,$ _,-1);'。您可能需要用正確數量的空格替換標籤,然後將其視爲固定長度的記錄,假設所有內容都排隊並且您有一個標題行來確定間距。 –