2013-11-15 39 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