免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hitsubunnu
打印 上一主题 下一主题

用sort进行比较时 如何先匹配 $a $b 在比较 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-01-22 16:37 |只看该作者
原帖由 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; 写进去  
教人教到底吧

论坛徽章:
0
12 [报告]
发表于 2008-01-22 16:39 |只看该作者
原帖由 apile 于 2008-1-22 16:28 发表
写这麽复杂的代码...如果哪天你要修改的话...
你可能会累死日後的自己....

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

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


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

论坛徽章:
0
13 [报告]
发表于 2008-01-22 16:43 |只看该作者
原帖由 Nosferatu 于 2008-1-22 16:39 发表


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

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

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


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

  5. close(FF);
  6. for(@by2and3){
  7.   print ;
  8. }
复制代码
xxx.txt
#abc,1,2,cvdadfsda
#abc,1,22,cvdadfsda
#bcd,1,10,dfjdkf
#bcddf,2,2,dfjdkfdfjd
#bcd,2,2,dfjdkf
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就 会出问题了...

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
14 [报告]
发表于 2008-01-22 16:44 |只看该作者
map {[$_,(split(/,/))[2]]}
这边动手脚.....
map {my $date=(split(/<>/))[4]; $date=~s/[^0-9]//g ;[$_,$date]}<FF>;



这种代码研究就好..

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

[ 本帖最后由 apile 于 2008-1-22 16:59 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2008-01-22 16:55 |只看该作者
原帖由 apile 于 2008-1-22 16:44 发表
map {[$_,(split(/,/))[2]]}
这边动手脚.....
map{(my date =(split(/,/))[2]=~s/\D//g;[$_,$date]};

没试过..你试试看..

这种代码研究就好..

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

不好意思  不能通过编译  

这个代码我就用一次,这个程序是给小日本用的,他们自己维护,要是能带进去,让他们将来爽去吧!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
16 [报告]
发表于 2008-01-22 16:59 |只看该作者
map {my $date=(split(/<>/))[4]; $date=~s/[^0-9]//g ;[$_,$date]}<FF>;
改好了..
注意日期输出格式中..月、日都一定要是两码....

论坛徽章:
0
17 [报告]
发表于 2008-01-22 17:03 |只看该作者
原帖由 apile 于 2008-1-22 16:59 发表
map {my $date=(split(//))[4]; $date=~s/[^0-9]//g ;[$_,$date]};
改好了..
注意日期输出格式中..月、日都一定要是两码....

非常感谢,你真的好强,对你无比崇拜(真心话)
!!!
让小日本们 玩去吧!!!  赫赫!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP