2012-12-30 52 views
-1

對不起,這是一個微不足道的問題。我有一個文件解析。它開始與一些空格,則第一個字段,然後空格,另一場等如何在Perl中以空白和前導零分割

例如:

00KST B4765 

我把它分解如下:

my @fields = split /\s+/; 

它的工作原理確定除了一個例外:$fields[0]123,我想保留它爲"000123"就像它是一個普通的字符串。

下面是完整的部分:

open UU, "<$file", or die; 
while (<UU>) { 
    chomp; 
    next if /^\#/; 
    my @fields = split/\s+/; 
    my $pno = 'EQ'."$fields[1]"; 
    print "$pno\n"; 
} 
+0

'$ perl -le'$ _ =「00KST B4765」;我的@a = split/\ s + /;打印$ a [0]''輸出爲'000123' –

+1

你應該顯示影響你的字段的其他代碼,因爲'split'與'000123'沒有任何關係被轉換爲'123'。 – TLP

+0

您向我們顯示的代碼不會去除字段中的前導零。如果在算術中使用字符串值「」000123「',它將被視爲十進制」123「,但是在此代碼中沒有任何內容會這樣做。也許你需要發佈你的整個程序? – Borodin

回答

3

不,000123將被存儲爲一個字符串。但是,如果您不小心將其轉換爲數字,您可能會將其視爲數字。例如。同時,使用/\s+/類似於在使用默認' '

my @fields = split ' ', "00KST B4765"; 
print $fields[0]; # prints 00
$fields[0] += 0; # converts string to number 
print $fields[0]; # prints 123 

注意它按空白進行分割,但它並不會減少前導空格,這可能會或可能不是你想要的是。

+0

在000123前面有一些空格。我有我的$ fields = split/\ s + /; print $ fields [1]; #打印123而不是000123. –

+0

下面是完整的部分:1.打開UU,「<$ file」或die; 2.(){chomp; 3.next if/^ \#/ 4.my @ fields = split/\ s + /; 5.my $ pno ='EQ'。「$ fields [1]」; 6.print「$ pno \ n」; } –

+0

通過該代碼,我得到了輸出'EQ000123'。雖然我當然在open語句中刪除了怪異的1,2,3,4數字和額外的逗號。我認爲這些是錯別字和評論。 – TLP