Re: [问题] 取值

楼主: abliou (愚者)   2014-04-14 12:06:48
那可能要先定义一下什么叫做一行了
假设阵列格式很简单 到是有办法写出"伪一行"
@data = ('ID2*1,2,3*2,3,4*','ID3**2*','ID4***' ) ;
sub{
(length($_[1])+length($_[2])==0)?
print "$_[0]\n" :
sub{
print "$_[0] $_\n" for
@_[1..$#_]
}->(($_[0]),
(map{'A'.$_}(split',',$_[1])),
(map{'B'.$_}(split',',$_[2])))
}->(/(.+)\*(.*)\*(.*)\*/)
for @data ;
我是觉得 有点难读 如果三个月后哪个倒楣鬼要改会有点麻烦
(套句Larry的话 三个月后的倒楣鬼通常是自己)
※ 引述《AntaresStar ()》之铭言:
: 这样就没办法那么少行啦...
: my @a = split /\*/;
: my $id = shift @a;
: $a[0] =~ s/(\d+)/A$1/g;
: $a[1] =~ s/(\d+)/B$1/g;
: @a = grep {/\S/} map {split /,/} @a;
: @a ? map {print "$id $_\n"} sort {substr($a,1)<=>substr($b,1)} @a
: : print "$id\n";
: 看有没有人有兴趣弄出更少行的 XD
: ※ 引述《yalent ( 心只有妳 )》之铭言:
: : 非常感谢您的回答~
: : 目前又遇到一个问题,在原始档的*之中,
: : 都会有一组数字如下的1,2,3等
: : ID2*1,2,4*2,3,4*
: : ID3**2*
: : ID4***
: : 但是我想将第一组数字1转成 A1,2转成 A2,4转成 A4
: : 至于第二组数字的2 转成B2,3转成 B3,4转成 B4
: : 之后再对内容作排序
: : 想将内容转为
: : ID2 A1
: : ID2 A2
: : ID2 B2
: : ID2 B3
: : ID2 A4
: : ID2 B4
: : ID3 B2
: : ID4
: : 那这部份取代的写法,我要怎么写呢?
作者: cutekid (可爱小孩子)   2014-04-14 12:18:00
依我理解: 'ID2*1,2,3*2,3,4*'
作者: cutekid (可爱小孩子)   2014-04-14 12:20:00
原 po 要的应该是:
作者: cutekid (可爱小孩子)   2014-04-14 12:21:00
ID2 A1ID2 A2ID2 B2ID2 A3ID2 B3ID2 B4
作者: cutekid (可爱小孩子)   2014-04-14 12:23:00
sort by numerical , alphabetical(A,B)
作者: AntaresStar   2014-04-14 20:24:00
没想过还有sub这招 XD
作者: cutekid (可爱小孩子)   2014-04-15 09:40:00
sub 这招好厉害,从没看过。不知道哪边有相关介绍,请指教
楼主: abliou (愚者)   2014-04-16 15:40:00
老实说 第一次看到这种用法是在这版上看到的 忘记是Lilo
楼主: abliou (愚者)   2014-04-16 15:41:00
还是cindy的文章了 这可能要请教他们这些高手
作者: cutekid (可爱小孩子)   2014-04-16 15:44:00
谢 abliou 大 :)
作者: yalent ( 心只有妳 )   2014-04-17 23:44:00
感谢您~
作者: CindyLinz (Cindy Wang)   2014-04-18 23:42:00
(惊)其实是写 javascript 的常用写法.. XD(function(){....})(); 用在 js 有制造 scope 的效果 :p

Links booklink

Contact Us: admin [ a t ] ucptt.com