用sort进行比较时 如何先匹配 $a $b 在比较



QUOTE:
原帖由 apile 于 2008-1-22 16:28 发表
写这麽复杂的代码...如果哪天你要修改的话...
你可能会累死日後的自己....

20080122可以用
my($year,$mon,$day,) = unpack("A4A2A2",$date);

如果是2008年12月12日..则可以用
my($year,$mon,$day)  ...

其实我的程序  是向你学的  
open(FF,"test.dat" or die $!;
@by2and3 = map {$_->[0]} sort {$b->[1] <=> $a->[1]} map {[$_,(split(/,/))[2]]} <FF>;
close(FF);
for(@by2and3){
  print;
}
你还记得 这个代码吧   我现在就是想将 (split(/,/))[2] 匹配了成数字 再带进去 如何将 (split(/,/))[2] =~ s/[^0-9]//g; 写进去  
教人教到底吧


QUOTE:
原帖由 apile 于 2008-1-22 16:28 发表
写这麽复杂的代码...如果哪天你要修改的话...
你可能会累死日後的自己....

20080122可以用
my($year,$mon,$day,) = unpack("A4A2A2",$date);

如果是2008年12月12日..则可以用
my($year,$mon,$day)  ...

apile大大的话正是我想说的,过度复杂的re会给以后的维护带来很大的困难,如果写出来的正则表达式像天书一样,基本上这时候你就该考虑重构了


QUOTE:
原帖由 Nosferatu 于 2008-1-22 16:39 发表


apile大大的话正是我想说的,过度复杂的re会给以后的维护带来很大的困难,如果写出来的正则表达式像天书一样,基本上这时候你就该考虑重构了

说实话 我这个程序正是跟 apile大大的  学的  他的原程序

发表在 2005-8-19 12:55 apile
apile
perl 排序

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
open(FF,"xxx.txt");
@by2and3 =  map{$_->;[0]} sort{$a->;[1] <=>; $b->;[1] || $a->;[2] <=>; $b->;[2]  }
        map{[$_,(split(/,/))[1],(split(/,/))[2]]} <FF>;;

close(FF);
for(@by2and3){
  print ;
}



QUOTE:
xxx.txt
#abc,1,2,cvdadfsda
#abc,1,22,cvdadfsda
#bcd,1,10,dfjdkf
#bcddf,2,2,dfjdkfdfjd
#bcd,2,2,dfjdkf



QUOTE:
output
$ perl  tt.pl
#abc,1,2,cvdadfsda
#bcd,1,10,dfjdkf
#abc,1,22,cvdadfsda
#bcddf,2,2,dfjdkfdfjd
#bcd,2,2,dfjdkf

更簡單的..如果第一栏数字,第二栏是文字...分隔符号是空白...

map{[$_,(split(/,/))[1],(split(/,/))[2]]} 改成用\s+分隔
sort{$a->;[1] <=>; $b->;[1] || $a->;[2] <=>; $b->;[2]  }
其中的$a->;[2]<=>;$b->;[2] 改成 $a->;[2] cmp $b->;[2]
可以叁考精华区中 sort与map的特殊用法..

关於第二的问题..当然可以..只是你要考虑
data的正确性问题...同时被修改的话..data就 会出问题了...
map {[$_,(split(/,/))[2]]}
这边动手脚.....
map {my $date=(split(/<>/))[4]; $date=~s/[^0-9]//g ;[$_,$date]}<FF>;



这种代码研究就好..

我没有在程序中用过...怕累死自己..



QUOTE:
原帖由 apile 于 2008-1-22 16:44 发表
map {[$_,(split(/,/))[2]]}
这边动手脚.....
map{(my date =(split(/,/))[2]=~s/\D//g;[$_,$date]};

没试过..你试试看..

这种代码研究就好..

我没有在程序中用过...怕累死自己..

不好意思  不能通过编译  

这个代码我就用一次,这个程序是给小日本用的,他们自己维护,要是能带进去,让他们将来爽去吧!
map {my $date=(split(/<>/))[4]; $date=~s/[^0-9]//g ;[$_,$date]}<FF>;
改好了..
注意日期输出格式中..月、日都一定要是两码....


QUOTE:
原帖由 apile 于 2008-1-22 16:59 发表
map {my $date=(split(//))[4]; $date=~s/[^0-9]//g ;[$_,$date]};
改好了..
注意日期输出格式中..月、日都一定要是两码....

非常感谢,你真的好强,对你无比崇拜(真心话)
!!!
让小日本们 玩去吧!!!  赫赫!