2013-11-15 55 views
1

我是新來的Perl編程。 我有一個CSV文件,其中有N個字段,其中第N個字段具有所有記錄的尾部空格。我想刪除所有這些拖尾空間。請幫助我。Perl腳本刪除尾隨空格在一個CSV文件

我已經在循環中使用這種替代。但它給了我的空文件

s/\s+$// 

示例文件

123,ABCD,"AC,BD",21/12/2013   
134,CDEF,"CD,BD,ED",23/11/2013  
987,TGYH,"HY,-.FDDS",20/11/2013  

輸出

123,ABCD,"AC,BD",21/12/2013 
134,CDEF,"CD,BD,ED",23/11/2013 
987,TGYH,"HY,-.FDDS",20/11/2013 

請讓我知道如果你需要更多的細節。 提前致謝。

+1

您輸入不顯示任何尾隨空白,正則表達式看起來好像它會從行的末尾,而不是第N場結束尾隨空格的結果。從行尾刪除尾部空格很簡單。從通過線引號內場中途結束刪除尾隨空格是相當困難(你會開始用[文字:: CSV(http://search.cpan.org/perldoc?Text%3A%3ACSV)然後使用正則表達式應用於它讀取的字段)。 –

回答

2

您正則表達式似乎不錯。你可以說:

perl -ple 's/\s+$//' filename 

要就地將更改保存到文件,說:

perl -i -ple 's/\s+$//' filename 
+0

請給我的全部腳本 –

+4

@ user2992186這是一個完整的腳本。 – devnull

0

步驟來刪除前後的空格在CSV文件:

  1. 打開輸入文件

    OPEN FILE, "<$input_file"; 
    
  2. 循環每行文件中做每一行的內飾在CSV file.In while循環使用正則表達式來修剪領導和每個字段

    while(my $row = <FILE>) 
    { 
        $row =~ 's/\s//g'; 
    } 
    

這空間的結尾會給你你期待

+0

這將刪除_all_空白,不僅是前/後的空白。它會將'foo bar'擠壓成''foobar'''。它不會更改輸入文件,只需更換並丟棄它。 OPEN應該是開放的。 '$ row =〜's/\ s // g';'應該是'$ row =〜s/\ s // g;'(不含引號)。 – PerlDuck