2012-10-01 110 views

回答

0

在Perl中,使用chomp。您可能需要chomp以逗号结尾的每一行:

perl -pe 'chomp if /,$/' input.txt 

输入文件看起来像一个CSV文件。这可能是最好使用一个模块来解析它:Text::CSV

1

以饱满的错误检查:

use Text::CSV_XS qw(); 

my $qfn_in = '...'; 
my $qfn_out = $qfn_in . '.new'; 

my $csv = Text::CSV_XS->new({ 
    binary => 1, 
    eol => "\n", 
}); 

open(my $fh_in, "<:encoding(UTF-8)", $qfn_in) 
    or die("Can't open \"$qfn_in\": $!\n"); 

open(my $fh_out, ">:encoding(UTF-8)", $qfn_out) 
    or die("Can't create \"$qfn_out\": $!\n"); 

while (my $row = $csv->getline($fh)) { 
    s/\n/ /g for @$row; 
    $csv->print($fh, $row) 
     or die("Error writing to \"$qfn_out\": " . $csv->error_diag() . "\n"); 
} 

$csv->eof() 
    or die("Error reading \"$qfn_in\": " . $csv->error_diag() . "\n"); 

close($fh_in); 
close($fh_out) 
    or die("Error writing to \"$qfn_out\": $!\n"); 

rename($qfn_out, $qfn_in) 
    or die("Can't overwrite \"$qfn_in\" with \"$qfn_out\": $!\n"); 
+0

为什么downvote? – ikegami

+0

应该为输出打开$ fh_out(>); $ fn_ *!= $ fh_ +(关闭)。 –

+0

@ Ekkehard.Horner,谢谢,修正。 – ikegami

0

下面将实现这一点,虽然Text::CSV_XS的解决办法是更强大:

use strict; 
use warnings; 


my $str =<<"DATA"; 
"user1","John","Doe","123 a street, 
San Francisco, 
CA, 94089" 
"user2","Foo","Bar","123 x rd., San Jose, CA 95129" 
DATA 

$str =~ s/,\n/,/g; 

print $str;