2011-08-01 44 views
2

我是Perl的新手。我有一个任务将行转换为大量数据的列。
将行转换为使用Perl的列

 
customers   goods  transportation 
----------  -----  -------------- 
A, B, C, D  rice  truck 
E, G, D   corn  train 
.............  .....  ......... 
T, H, K, M, N  wheat  air cargo


我想有一个输出的样子:

 
customers   goods  transportation 
----------  -----  -------------- 
A     rice  truck 
B     rice  truck 
C     rice  truck 
D     rice  truck 
.............  .....  ......... 
N     wheat  air cargo 

会有人帮助。非常感谢你。

+0

听起来像是功课我 – TLP

回答

0

从我看perl的时间很长,但是这个perl mod还有什么好处吗?

Data::Pivot

2

最大的可能是你所遇到的map function,研究它是如何工作以及如何构建的行或列,你会得到它,祝你好运! :)

1

谢谢大家。经过几个小时的努力,我可以弄清楚如何完成我的任务。 它需要一些简单的步骤来手动干预输入和输出,即 即在输入的第一列的末尾添加,,并使用Excel移除输出的第二列中的\的。 现在是时候提交输出。我很感激,如果有人有更好的Perl 代码来解决它。

#!/usr/bin/perl 
my @records; 
while (<DATA>) { 
    chomp; 
    my @columns = split ", ", $_; 
    push @records, \@columns; 
} 

foreach my $record (@records) { 
    foreach my $column (@{$record}) { 
     if (\$column != \$$record[-1]) { 
      print "$column\t \\$$record[-1]\n"; 
     } 
    } 
} 

__DATA__ 
A, B, C, D,  Rice Truck 
E, G, D, Corn Train 
T, H, K, M, N, Wheat Air cargo 

__OUTPUT__ 
A \ Rice Truck 
B \ Rice Truck 
C \ Rice Truck 
D \ Rice Truck 
E \ Corn Train 
G \ Corn Train 
D \ Corn Train 
T \ Wheat Air cargo 
H \ Wheat Air cargo 
K \ Wheat Air cargo 
M \ Wheat Air cargo 
N \ Wheat Air cargo 
+0

为了处理固定长度的记录,而无需添加一个','末,尝试使用[解压缩](http://perldoc.perl.org/functions/ unpack.html)函数。 参见[perlpacktut](http://perldoc.perl.org/perlpacktut.html#Packing-Text)。或者,您可以使用[Parse :: FixedLength](http://stackoverflow.com/questions/407407/how-do-i-read-fixed-length-records-in-perl)。 – stevenl