正規表現でカンマ位置ぞろえ
newをだらだらだらっと呼ぶ文を書いていた。
@defines = ( ColDefine->new("ID", 12, "CHAR", "NOTNULL") , ColDefine->new("NAME", 100, "CHAR") , ColDefine->new("AGE", 3, "NUMBER") , ColDefine->new("SEX", 1, "NUMBER") , ColDefine->new("COMPANY", 100, "CHAR") , ColDefine->new("ADDRESS", 200, "CHAR") , ColDefine->new("PICK_ADDRESS", 200, "CHAR") , ColDefine->new("RECV_ADDRESS", 200, "CHAR") );
こんなの。
書いてた、といってもExcelの仕様書からコピーしてきたこんなのに
ID 12 CHAR NAME 100 CHAR AGE 3 NUMBER SEX 1 NUMBER COMPANY 100 CHAR ADDRESS 200 CHAR PICK_ADDRESS 200 CHAR RECV_ADDRESS 200 CHAR
エディタ上で正規表現使って、
s/([^\t]+)\t([^\t]+)\t([^\t]+)\r/ , ColDefine->new("\1", \2, "\3")\r/
とやって、ちょこちょこっとなおしただけなんだけれども。
で、せっかくだからこれを正規表現を使ってカンマの位置とかそろえられないかな?
そろえられる気がする。
ちょっと考えてみよう、と思った次第。
正規表現を使ってたから正規表現を使ってなんとかしようなんて考えるあたりが金色のハンマーみたいですね。ええ、頭悪いです。
これでどうか、と思った。
s/^( [, ] [^,]{1,28}),/\1 ,/g
g修飾子は繰り返しの意。
繰り返し適用するとうまくいく。
(.Net関連の正規表現では\(wでw桁の右詰とかができるようだが・・・)
で、こうなる
ColDefine->new("ID" , 12, "CHAR", "NOTNULL") , ColDefine->new("NAME" , 100, "CHAR") , ColDefine->new("AGE" , 3, "NUMBER") , ColDefine->new("SEX" , 1, "NUMBER") , ColDefine->new("COMPANY" , 100, "CHAR") , ColDefine->new("ADDRESS" , 200, "CHAR") , ColDefine->new("PICK_ADDRESS", 200, "CHAR") , ColDefine->new("RECV_ADDRESS", 200, "CHAR")
でも、Alt-AとEnterを繰り返しパタパタたたくのがなんかいやだ。
もう少しなんとかならないものか。正規表現一撃では無理か。マクロでも組んでみればいいか。