您好,我是Perl的新手并被要求完成任务。
我有一个.csv格式的记录文件,包含10个或更多文件,并被要求转置记录,以便每行记录转换为10行。
id Column1 column2 column3 ..... column N
1 apple Red Medium Text1
2 Mango Yellow Large Text2
3 Banana Yellow small Text3
4 Apple Red Medium Text4
5 Pear Green Medium Text5
这需要显示为
id 1 column1 Apple
id 1 column2 Red
id 1 column3 Medium
.
.
id 1 columnN text1
非常感谢任何帮助或建议。
答案 0 :(得分:0)
正如@aartist所评论的,你所需要的只是Text::CSV。您可以使用cpan
实用程序或使用此oneliner安装它:
curl -L http://cpanmin.us | perl - --sudo Text::CSV
请阅读文档,您的任务应该很容易解决。
答案 1 :(得分:0)
编辑:根据其他输入,它看起来像是一种交错的标题列:
use Text::CSV_XS;
my $csv = Text::CSV_XS->new({ binary => 1, sep_char => ';' })
or die;
my $hdr = $csv->getline(\*DATA);
while (my $row = $csv->getline(\*DATA)) {
$csv->combine(
map { $hdr->[0], $row->[0], $hdr->[$_], $row->[$_] } 1..$#$row
);
print $csv->string,"\n";
}
__DATA__
id;Column1;column2;column3;columnN
1;apple;Red;Medium;Text1
2;Mango;Yellow;Large;Text2
3;Banana;Yellow;small;Text3
4;Apple;Red;Medium;Text4
5;Pear;Green;Medium;Text5
这给出了:
id;1;Column1;apple;id;1;column2;Red;id;1;column3;Medium;id;1;columnN;Text1
id;2;Column1;Mango;id;2;column2;Yellow;id;2;column3;Large;id;2;columnN;Text2
id;3;Column1;Banana;id;3;column2;Yellow;id;3;column3;small;id;3;columnN;Text3
id;4;Column1;Apple;id;4;column2;Red;id;4;column3;Medium;id;4;columnN;Text4
id;5;Column1;Pear;id;5;column2;Green;id;5;column3;Medium;id;5;columnN;Text5