【问题标题】:Perl: Update a field in each line of a CSV filePerl:更新 CSV 文件的每一行中的一个字段
【发布时间】: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


    【解决方案1】:

    我必须使用 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: $!";
    

    【讨论】:

    • 可能打开了两个文件句柄——一个用于输入,一个用于输出。这样您就可以依次读取和处理每一行,而不需要可能非常大的)@rows 数组。
    猜你喜欢
    • 2021-02-19
    • 2021-08-31
    • 2012-02-20
    • 2018-02-15
    • 1970-01-01
    • 2017-02-07
    • 2018-03-22
    • 2021-03-02
    相关资源
    最近更新 更多