首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

用perl的sort和map对文本文件内容排序?解决方案

2012-03-04 
用perl的sort和map对文本文件内容排序?文本文件有6列,对其中的1,2,4,5排序,列用\t分隔试过了这个是可行的:

用perl的sort和map对文本文件内容排序?
文本文件有6列,对其中的1,2,4,5排序,列用\t分隔

试过了这个是可行的:
open(FF,"<a.txt");

@by2and3 = map{$_->[0]} 
  sort{$a->[0] cmp $b->[0] || $a->[1] cmp $b->[1] || $a->[4] <=> $b->[4] || $a->[5] <=> $b->[5]}
  map{[$_,(split(/\t/))[0],(split(/\t/))[1],(split(/\t/))[4],(split(/\t/))[5]]} <FF>;

close(FF);

open (OF,">b.sort");
for(@by2and3){
  print OF $_;
}
close(OF);

但不是太理解,我想写成这种的比较清楚:
#先读文件
open(FF,'a.txt');
while (<FF>){
  $l=trim($_);
  @list = (@list,(split(/\t/,$l)));
}

#排序选项
sub seniority {
  $a->[0] cmp $b->[0]
  or $a->[1] cmp $b->[1]
  or $a->[4] <=> $b->[4]
  or $a->[5] <=> $b->[5]
}

#排序
@ranked = sort seniority @list;
foreach $emp (@ranked) {
  print "$emp->[0]\t$emp->[1]\t$emp->[4]\t$emp->[5]\t$emp->[2]\n";
}

但输出来的是空白的.
我想应该是从@ranked = sort seniority @list; 这步的list不太对. 不知道怎么修改能出正确的结果?

谢谢.



[解决办法]
@list = (@list,(split(/\t/,$l))); 
这句有问题,split出来的就一个数组,这样就等于把所有行切分后串成一行了
另外对1,2,4,5列排序,对应的下标是0,1,3,4不是0,1,4,5

[解决办法]

Perl code
while ( <FF>){     $l=trim($_);     #在一个数组中保存另一个数组的引用,构造二维数组    $list[@list] = [split(/\t/,$l))]; # or push(@list,[split(/\t/,$l)]);} 

热点排行