2014-10-31 20 views
2

下面我有一個我想操縱的數據列表。我想拆分這些列並以不同的安排重新加入它們。如何使用chomp

我想切換與第三個數組的最後一個元素,但我遇到了一個問題。 由於數組的最後一個元素在結尾處包含一個行字符,因此當我將它切換爲第三個元素時,它會將所有元素都排成一行。

CODE

while (<>) { 
    my @flds = split /,/; 
    DO STUFF HERE; 
    ETC; 
    print join ",", @flds[ 0, 1, 3, 2 ]; # switches 3rd element with last 
} 

樣本數據

1,josh,Hello,Company_name 
1,josh,Hello,Company_name 
1,josh,Hello,Company_name 
1,josh,Hello,Company_name 
1,josh,Hello,Company_name 
1,josh,Hello,Company_name 

我的結果 - 踢下了線。

1,josh,Company_name 
,Hello1,josh,Company_name 
,Hello1,josh,Company_name 
,Hello1,josh,Company_name 
,Hello1,josh,Company_name 
,Hello1,josh,Company_name,Hello 

*期望的結果**

1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
1,josh,Company_name,Hello 
1,josh,Company_name,Hello 

我知道它是與格格但是當我的Chomp的第一個或最後一個元素,所有\ n被刪除。 當我在兩者之間使用chomp時,沒有任何反應。誰能幫忙?

+1

如果你的系統有'perldoc',我建議首先使用它,當你對某個特定功能有疑問時。從你的shell運行起來非常方便,而且文檔非常好。像這樣運行:'perldoc -f '或者在這種情況下,['perldoc -f chomp'](http://perldoc.perl.org/functions/chomp.html)(我還添加了一個指向在線版)。請注意,'chomp'的文檔包含一個代碼示例,它非常類似於您的代碼。 – ThisSuitIsBlackNot 2014-10-31 15:12:24

+0

非常酷!非常感謝這篇技巧,我發現自己很多時候都需要很多功能的例子! @ThisSuitIsBlackNot – JDE876 2014-10-31 15:31:54

回答

4

chomp從參數中刪除尾隨的換行符。由於您的四個字段都不應該包含換行符實際上,這可能是您想要爲數據處理目的所做的事情。你可以用chomp刪除換行符之前,你甚至分割線到字段,然後每條記錄後面添加一個新行與最終打印聲明:

while (<>) { 
    chomp; # Automatically operates on $_ 
    my @flds = split /,/; 
    DO STUFF HERE; 
    ETC; 
    print join(",", @flds[0,1,3,2]) . "\n"; # switches 3rd element with last 
} 
+0

或'say join「,」,@flds [0,1,3,2];' – ikegami 2014-10-31 15:16:43

0
while (<>) { 
    chomp; 
    my @flds = split /,/; 
     ... rest of your stuff 
} 

while循環,因爲每個線路被處理,$_被設定爲行的內容。默認爲chomp,作用於$_並刪除尾隨行提要。 split也默認使用$_,所以工作正常。

從技術上講,會發生什麼是@flds的最後一個元素,包括行尾的\n - 例如, $flds[3]

0

爲Chomp()函數將刪除(通常)任何換行符從字符串的末尾開始。我們通常說的原因是,它實際上刪除了任何匹配$ /(輸入記錄分隔符)當前值的字符,並且$/defaults爲換行符。

示例1.啃一個字符串 大多數情況下,當從文件或用戶讀取數據時,您將使用chomp()。例如,當從標準輸入流(STDIN)讀取用戶輸入時,每行數據會得到換行符。 chomp()在這種情況下非常有用,因爲您不需要編寫正則表達式,也不必擔心刪除需要的字符。

while (my $text = <STDIN>) { 
chomp($text); 
print "You entered '$text'\n"; 
last if ($text eq ''); 

}

用法示例和這個程序的輸出是:

你進入 '一個字' 一些文本 您輸入 '一些文本'

您輸入一個字''