那可能要先定义一下什么叫做一行了
假设阵列格式很简单 到是有办法写出"伪一行"
@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
: : 那这部份取代的写法,我要怎么写呢?