Perl:更新CSV文件的每一行中的字段

时间:2010-11-02 10:27:43

标签: perl csv text-processing

假设我有一个CSV文件,其中有数千行,类似于下面这一行:

1,fred,smith,“11,erewhon avenue”,“XYZ Company,101 the road”,“020 123456”,英国

我想使用Perl仅在CSV文件中更新电话号码字段。我认为Text :: CSV是最好的方法,但我不知道如何使用它来更新字段并将其写回。

1 个答案:

答案 0 :(得分:4)

我必须RTFM - 我想这会做到:

use Text::CSV;

my @rows;
my $csv = Text::CSV->new ( { binary => 1 } )  # should set binary attribute.
             or die "Cannot use CSV: ".Text::CSV->error_diag ();

open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!";
while ( my $row = $csv->getline( $fh ) ) {
   $row->[6] = get_new_tel_number();
   push @rows, $row;
}
$csv->eof or $csv->error_diag();
close $fh;

$csv->eol ("\r\n");

open $fh, ">:encoding(utf8)", "new.csv" or die "new.csv: $!";
$csv->print ($fh, $_) for @rows;
close $fh or die "new.csv: $!";