プログラミング: 2012年2月アーカイブ

俺は昔からテキストエディタは秀丸エディタを愛用している。
スクリプト系の言語だと、IDE なんか起動せず、エディタ上でちゃちゃっと(新規開発も含めて)やっちゃう人、多いだろう。
あと、テストデータの作成とか。

特に、テストデータなんか作ってると、タブ区切りされた項目の1番目と5番目の項目を入れ替えてえなあ・・・なんてこともよくある話で(まあ、その程度なら、Excel とかで読み込んで編集してもいいんだけど(^^;)、その点、秀丸エディタは正規表現(性器表現じゃねえぞ!)も使えるから楽勝・・・

だったはずなのだが、今まではそういう時に秀丸エディタは使ってなかったんだよね。

例えば、Perl の正規表現で、タブで区切られた5個の項目を逆順に並べようとすると(仮に1~3番目の項目が数値のものだけ・・・という条件つけてみよう)、

$str =~ s/^(\d+)\t(\d+)\t(\d+)\t(.+?)\t(.+)$/$5\t$4\t$3\t$2\t$1/;

みたいな感じか。(実際はタブまで括って処理するけど、今回はわかりやすいようにタブはマッチングさせてないよ)

で、秀丸エディタで同じことをすると・・・いや、こういうのを秀丸エディタでしたことなかった。実は以前、「マッチした部分」をどう表現していいか、ヘルプを見てもまったくわからなかったので、それ以来置換では正規表現を使ったことがなかったのだ。(検索ではバリバリ使ってるけど)
Perl の正規表現だと、上記のように、カッコで括った部分が、それぞれ $1~$5 という特殊な変数にセットされる。
秀丸エディタで「マッチした部分を指定するのはカッコじゃねえけど、じゃ、なんなの?」と、「マッチした文字列はどう表現すればいいの?」が分かんなかったのだ。

答えは、「カッコではなく \f」「マッチした部分は、$0 から順にセットされていく」

書き方は↓こう。

変換前
^[0-9]+\f\t\f[0-9]+\f\t\f[0-9]+\f\t\f.+\f\t\f.*$

変換後
$8\t$6\t$4\t$2\t$0

注意しないといけないのは、カッコ()のように「囲む向き」が無いので、\f と \f で囲まれたところは全て $0~$X にセットされるということ。(正確には \f は「囲む」わけではなく「区切る」だけだけどな)
上の例では、項目の間のタブコードも変数にセットされる。
なので、「$8$6$4$2$0」みたいに歯抜けになるのだ。

あ、それと、Perl だと $1~$X だけど、秀丸エディタは $0 スタートね。

Perl の正規表現のように、多重にカッコで括ったりは出来ないようなので、あまり複雑なマッチングは厳しいが、これでかなりのことが秀丸エディタで出来るようになった。
さっそく、昨日、数百件あるテストデータの直しを正規表現使って一発で行ったよ。
手作業でいちいち治してたら、1時間くらいかかったであろうことを 1分で(笑)
(ま、実際 1時間もかかるような直しするなら変換用のちょいプロ書くけどな(笑))

ま、何にせよ、正規表現、最高(笑)

このアーカイブについて

このページには、2012年2月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2011年10月です。

次のアーカイブはプログラミング: 2012年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら