看板 RegExp 關於我們 聯絡資訊
#!/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
godspeedlee:假如空白欄位的空白字元長度不定,那這就是解答了 10/04 14:19
godspeedlee:不過這要長度不為0的狀況下:P 10/04 14:25
godspeedlee:另外,「.」也會match空白字元,您的解法中某些「.」 10/05 00:40
godspeedlee:替換成\S比較好喔 10/05 00:40
godspeedlee:還有就是「空白的欄位」的數量要等於「空白字元」 10/05 00:45
godspeedlee:的數量的情況下您的解法才會成立..^^ 10/05 00:46
godspeedlee:不過能想到這樣寫也是很厲害~ 10/05 00:53