使用Perl将Excel列转换为基于id号的行

时间:2011-09-09 16:52:30

标签: perl excel

您好,我是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

非常感谢任何帮助或建议。

2 个答案:

答案 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