2011-08-01 45 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