作者pat12345 (咖啡杯)
看板Perl
标题Re: [问题] 文字元素的合成
时间Tue Apr 23 21:07:31 2019
最後我自己想出来了,虽然有点烙烙长
不过还是有得到正确的output,分享给大家,
两个重点
1. 用回圈先把有[]的做分类
2. 用计数器判断C 或 P 出现了几次
cnt < 1 , 取C 或 P 就好
cnt > 1 ,取元素
-----------------------
$str = 'A, B, C[1], C[0], D, P[3], P[2], P[1],';
$str1 = "";
@arr1 = split (' ',$str);
$cnt = 0;
$pin_1st = $1 if ( @arr1[0] =~ /^(\w+)/ );
foreach (@arr1) {
if ($_ =~ /(\w+)(\[\d+\])/) {
$pin1 = $1;
$bus1 = $2;
if ( $pin1 eq $pin1_pre ) {
$cnt = $cnt +1;
}
else {
$cnt = 1;
}
if ($cnt<2) {
$str1 = "$str1"." $pin1,";
}
$str1 = "$str1"."$bus1";
$pin1_pre = $pin1;
}
elsif ( $_ =~ /(\w+)/ ){
$pin2 = $1;
$str1 = "$str1"." $pin2,";
}
}
@arr2 = split (' ',$str1);
foreach (@arr2) {
if ( $_ =~ /\[/) {
$pin3 = $1 if ($_ =~ /(\w+)/);
$bus2 = $1 if ($_ =~ /\[(\d+)/);
$bus3 = $1 if ($_ =~ /(\d+)\]$/);
print "\[$bus2:$bus3\] $pin3;\n";
}
else {
$pin4 = $1 if ($_ =~ /(\w+)/);
print "$pin4;\n";
}
}
----------------------------------------------
※ 引述《pat12345 (咖啡杯)》之铭言:
: 大家好,我是perl初学者,
: 我想把以下的文字做换列的转换,
: 难的地方是带括号的,
: 想请大家给我一些建议,
: 感激不尽~~
: input:
: A, B, C[1], C[0], D, P[3], P[2], P[1],
: output:
: A;
: B;
: [1:0] C;
: D;
: [3:1] P;
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.137.87.183
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1556024853.A.633.html