看板 Perl 關於我們 聯絡資訊
重新修改與精簡~ my $FLOW; my @Array=(); s/(\)\s+\;)+?|\?|\:/=/g; @Array = split(/\=/, $_); for(@Array) { s/^\s+|\s+$//g; $Array[1] =~ s/\s+//g; $Array[1] =~ s/,/, /g; } $blank0 = " "x(25 - length(Array[0])); $blank1 = " "x(32 - length(Array[1])); $blank2 = " "x(50 - length(Array[2])); $FLOW = "$Array[0]$blank0 ? $Array[1]$blank1 : $Array[2]$blank2 ); $Array[3] "; ※ 引述《luncha (謝謝)》之銘言: : 各位大大,目前要處理字串重新排列的問題 : 透過split+substr,能夠完成,但是$FLOW宣告的方式有點怪, : 想了解有沒有更好的寫法呢? 謝謝 : <以下是字串與code內容:> : =====字串====== : OPEN_SHORT ? : #C(hw_fail_1, sw_fail_1 ) ; //AA : MBIST ? : #C(hw_fail_2, sw_fail_2 ) ;//BB : last_item? #C(pass, pass) : #C(hw_fail_3, sw_fail_3 ) ; : =====執行程式的輸出===== : OPEN_SHORT ? : #C(hw_fail_1, sw_fail_1 );//AA : MBIST ? : #C(hw_fail_2, sw_fail_2 );//BB : last_item ? #C(pass, pass) : #C(hw_fail_3, sw_fail_3 ); : =====程式===== : my $FLOW=" "; : my @Array=(); : $FLOW =~ s/\)\s+\;/=/g; : $FLOW =~ s/\?|\:/=/g; : @Array = split(/\=/, $FLOW); : $Array[0] =~ s/\s+//g; : $Array[1] =~ s/^\s+|\s+$//g; : $Array[1] =~ s/\(\s+/(/g; : $Array[1] =~ s/(\w+)$/$1)/g; : $Array[2] =~ s/^\s+|\s+$//g; : $Array[3] =~ s/^\s+|\s+$//g; : substr($FLOW, 0,0) = "Array[0]"; : substr($FLOW, 16,0) = "? Array[1]"; : substr($FLOW, 31,0) = ": Array[2]"; : substr($FLOW, 56,0) = ");Array[3]"; : print $FLOW; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.231.114.132 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1588990105.A.021.html ※ 編輯: luncha (61.231.114.132 臺灣), 05/09/2020 12:29:24
flu: 不用mod的話,覺得用 srintf "<%*s>" 類的似乎會好一點 05/11 21:22
flu: 或者 http://p3rl.org/perlform 05/11 21:22
flu: 如果有ascii以外的字元 unicode相關的mod也有能幫忙的 05/11 21:24