簡體   English   中英

如何使用排骨

[英]How to use chomp

下面是我要處理的數據列表。 我想拆分列,然后以不同的方式重新加入它們。

我想將數組的最后一個元素切換為第三個元素,但是遇到了問題。 由於數組的最后一個元素的末尾包含一個換行符,因此當我將其切換為thrid時,它會將所有內容都踢倒了一行。

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時,什么也沒發生。 有人可以幫忙嗎?

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
}
while ( <> ) {
    chomp; 
    my @flds = split /,/;
       ... rest of your stuff
 }

while循環中,在處理每一行時,將$_設置為該行的內容。 默認情況下chomp ,作用於$_並刪除尾隨換行符。 split也默認使用$_ ,所以效果很好。

從技術上講,將要發生的是@flds的最后一個元素包括行尾的\\n ,例如$flds[3]

chomp()函數將(通常)從字符串末尾刪除任何換行符。 我們通常說的原因是,它實際上會刪除與$ /(輸入記錄分隔符)的當前值匹配的任何字符,並且$ /默認為換行符。

示例1.截斷字符串從文件或用戶讀取數據時,通常會使用chomp()。 例如,當從標准輸入流(STDIN)讀取用戶輸入時,每行數據都會獲得一個換行符。 chomp()在這種情況下非常有用,因為您無需編寫正則表達式,也無需擔心會刪除所需的字符。

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

}

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

一個詞,您輸入了“一個詞”,一些文本,您輸入了“一些文本,”

你登錄了 ''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM