【发布时间】:2011-05-03 20:52:56
【问题描述】:
假设我有一个包含数千行的 CSV 文件,如下所示:
1,fred,smith,"11, erewhon avenue","XYZ Company, 101 the road","020 123456",UK
我想使用 Perl 仅更新 CSV 文件中的电话号码字段。我认为 Text::CSV 是最好的方法,但我不确定如何使用它来更新字段并将其写回。
【问题讨论】:
标签: perl csv text-processing
假设我有一个包含数千行的 CSV 文件,如下所示:
1,fred,smith,"11, erewhon avenue","XYZ Company, 101 the road","020 123456",UK
我想使用 Perl 仅更新 CSV 文件中的电话号码字段。我认为 Text::CSV 是最好的方法,但我不确定如何使用它来更新字段并将其写回。
【问题讨论】:
标签: perl csv text-processing
我必须使用 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: $!";
【讨论】: