修改CSV文件

时间:2016-07-05 15:22:57

标签: perl csv

我需要读取输入的CSV文件,并按如下方式更改标题和一些值。

有人可以帮助我实现这个目标吗?

输入文件

Level;Ref;Number;Ref Code
0;Ref1;4;16
1;Ref6;2;32
4;Ref9;7;8
6;Ref2;6;32

输出文件:

Level1;Ref;Ref Code
0;Reference1;16
1;Reference6;32
4;Reference9;8
6;Reference2;32

我从这段代码开始,但我不知道如何更改标题。

my $file = 'Classeur1.csv';
my $csv = Text::CSV->new( { binary => 1, eol => $/, sep_char => ';' } );
open my $io, "<", $file or die "$file: $!";

my $cols1 = $csv->column_names($csv->getline($io));
while ( my $href = $csv->getline_hr($io) ) {
    print Dumper( \$href );
}

close $io;

转储器输出

$VAR1 = { 'Number' => '4', 'Level' => '0', 'Ref Code' => '16', 'Ref' => 'Ref1' };
$VAR1 = { 'Number' => '2', 'Level' => '1', 'Ref Code' => '32', 'Ref' => 'Ref6' };
$VAR1 = { 'Number' => '7', 'Level' => '4', 'Ref Code' => '8',  'Ref' => 'Ref9' };
$VAR1 = { 'Number' => '6', 'Level' => '6', 'Ref Code' => '32', 'Ref' => 'Ref2' };

1 个答案:

答案 0 :(得分:2)

核心Tie::File模块可以在这里为您提供帮助。它允许您通过绑定数组访问文件,以便对数组的任何更改都反映在文件的内容中

use strict;
use warnings 'all';

use Tie::File;

tie my @file, 'Tie::File', 'Classeur1.csv';

$file[0]  =~ s/Level/Level1/;
$file[$_] =~ s/Ref(\d+)/Reference$1/ for 1 .. $#file;