Re: [問題] 長度固定的寫法..(perl/php皆可)

看板RegExp (正規表示式 Regular Expression)作者 (可愛中央處理器)時間13年前 (2011/10/04 10:55), 編輯推噓5(502)
留言7則, 1人參與, 最新討論串5/6 (看更多)
#!/usr/bin/perl while(<DATA>){ # 用 "\t" 補齊結尾後面不足長度的部份 s/^$/"\t" x 39/e; s/^(.{5})$/$1 . "\t" x 34/e; s/^(.{11})$/$1 . "\t" x 28/e; s/^(.{25})$/$1 . "\t" x 14/e; s/^(.{32})$/$1 . "\t" x 7/e; # 用 "\t" 代替中間有欄位是空值的部份 s/^ {5}/"\t" x 5/e; s/^(.{5}) {6}/$1 . "\t" x 6/e; s/^(.{11}) {14}/$1. "\t" x 14/e; s/^(.{25}) {7}/$1. "\t" x 7/e; # 欄位中間加上逗號 s/^(.{5})(.{6})(.{14})(.{7})(.{7})$/$1,$2,$3,$4,$5/; # 去掉 "\t" s/\t//g; # 印出結果 print; } __DATA__ 123 j12345mc1235987ccccc aaaaxxxxxxx 12345a345cd2187ankjdkj219zxnmzxn2109890 12345a345cd2187ankjdkj219zxnmzxn 12345a345cd2187ankjdkj219 12345a345cd 12345 a345cd 2109890 2187ankjdkj219zxnmzxn zxnmzxn ※ 引述《squalll (追求夢想~)》之銘言: : 沒想到還會回來回這一篇.... : 最近才發現這樣寫有些資料有問題 : 因為資料欄位中不一定會有資料, : 最後一個欄位如果是空白的話這樣輸出就會錯誤 : 12345a345cd2187ankjdkj219zxnmzxn2109890 : 123 j12345mc1235987ccccc aaaaxxxxxxx : 12344123222 123ascv : 這樣到第三筆輸出的時候會變得很奇怪 : 預期應該會變成 : 12345,a345cd,2187ankjdkj219,zxnmzxn,2109890 : 123 ,j12345,mc1235987ccccc, aaaa,xxxxxxx : 12344,123222,,123ascv, : 但是實際上第三筆資料會變成 : 12344123222,123ascv之類的.. : 我的REGEXP目前是這樣寫 : foreach $thing (@list){ : $thing =~ s/(.{5})(.{6})(.{7})(.{8})(.{9})/$1,$2,$3,$4,$5/; : .... : } : 主要應該是因為s/match一串非空白字元,並以找到的字串為結尾 : 所以當我最後一欄資料為空白的時候就會發生錯誤了 : 不知道有沒有人遇過類似的問題? 該如何解決呢 : 我的資料是連續的..該怎麼寫才可以取出度定長度的值(包含空白) : 謝謝m(_ _)m : ※ 引述《squalll (放逐?)》之銘言: : : 有一堆連續的資料 : : 12345 a345cd 2187ankjdkj219 zxnmzxn 2109890 : : 123 j12345 mc1235987ccccc aaaa xxxxxxx : : 中間有空白分隔,不過因為長度都固定,想問取固定長度的regular怎麼寫呢 : : 希望能轉換成這樣,第一欄就固定取長度五個,第二欄六個,第三欄14個..之類的! : : 輸出結果: : : 12345,a345cd,2187ankjdkj219,zxnmzxn,2109890 : : 123 ,j12345,mc1235987ccccc, aaaa,xxxxxxx : : 謝謝大家 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.59.164.109

10/04 14:19, , 1F
假如空白欄位的空白字元長度不定,那這就是解答了
10/04 14:19, 1F

10/04 14:25, , 2F
不過這要長度不為0的狀況下:P
10/04 14:25, 2F

10/05 00:40, , 3F
另外,「.」也會match空白字元,您的解法中某些「.」
10/05 00:40, 3F

10/05 00:40, , 4F
替換成\S比較好喔
10/05 00:40, 4F

10/05 00:45, , 5F
還有就是「空白的欄位」的數量要等於「空白字元」
10/05 00:45, 5F

10/05 00:46, , 6F
的數量的情況下您的解法才會成立..^^
10/05 00:46, 6F

10/05 00:53, , 7F
不過能想到這樣寫也是很厲害~
10/05 00:53, 7F
文章代碼(AID): #1EYdME7R (RegExp)
文章代碼(AID): #1EYdME7R (RegExp)