Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:在CSV文件的每一行中更新一个字段_Perl_Csv_Text Processing - Fatal编程技术网

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

Perl:在CSV文件的每一行中更新一个字段,perl,csv,text-processing,Perl,Csv,Text Processing,假设我有一个CSV文件,其中有数千行与下面的类似: 1号,弗雷德·史密斯,“艾瑞文大道11号”,“路101号XYZ公司”,“020 123456”,英国 我想使用Perl只更新CSV文件中的电话号码字段。我认为Text::CSV是最好的方式,但我不确定如何使用它来更新字段并将其写回。我必须RTFM-我认为这样做可以: use Text::CSV; my @rows; my $csv = Text::CSV->new ( { binary => 1 } ) # should set

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

1号,弗雷德·史密斯,“艾瑞文大道11号”,“路101号XYZ公司”,“020 123456”,英国


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

我必须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: $!";
使用Text::CSV;
我的@行;
我的$csv=Text::csv->new({binary=>1})#应该设置binary属性。
或die“无法使用CSV:”.Text::CSV->error_diag();
打开我的$fh、“:encoding(utf8)”、“new.csv”或“new.csv:$!”;
$csv->print($fh,$\用于@行;
关闭$fh或关闭“new.csv:$!”;

我必须使用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: $!";
使用Text::CSV;
我的@行;
我的$csv=Text::csv->new({binary=>1})#应该设置binary属性。
或die“无法使用CSV:”.Text::CSV->error_diag();
打开我的$fh、“:encoding(utf8)”、“new.csv”或“new.csv:$!”;
$csv->print($fh,$\用于@行;
关闭$fh或关闭“new.csv:$!”;

可能有两个打开的文件句柄-一个用于输入,一个用于输出。这样,您就可以依次读取和处理每一行,而不需要太大的)@rows数组。可能会打开两个文件句柄—一个用于输入,一个用于输出。这样,您就可以依次读取和处理每一行,而不需要太大的行数组。