我需要读取输入的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' };
答案 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;