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