0

テキスト ファイルのフィールドの改行を削除する必要があります。例えば:

入力ファイルは次のようになります。

"user1","John","Doe","123 a street,
San Francisco,
CA, 94089"
"user2","Foo","Bar","123 x rd., San Jose, CA 95129"
...

最初のレコードの改行を削除するにはどうすればよいですか?

4

3 に答える 3

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");
于 2012-10-01T23:38:22.677 に答える
0

Perl では、 を使用しますchomp。おそらく、カンマで終わる各行を chomp したいでしょう:

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

入力ファイルは CSV ファイルのように見えます。モジュールを使用して解析する方が良いかもしれません: Text::CSV

于 2012-10-01T23:36:48.590 に答える
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;
于 2012-10-02T16:51:08.180 に答える