月曜日, 10月 16, 2006

秀丸エディタは素晴らしい 2

本日は秀丸エディタは素晴らしい2と題して書いてみたいと思います。
前回は正規表現検索のところを簡単ですが書いたので
今回は置換について書いて見たいと思います。

置換で素晴らしいのはやはり正規表現です。
しかも秀丸エディタの正規表現置換は補完が使用できます。
この補完機能が他のエディタにはない素晴らしい仕事をしてくれます。
※ないと言ってもある全てのエディタにないわけではないですね。

ここでは補完の説明に入る前に正規表現を使用した通常の置換の説明を行い
その後に補完を使用した置換について説明したいと思います。

「abc」を「ABC」に変換する場合、どのエディタでも行なう事ができますが
行頭の「abc」を「ABC」に変換するという事になると話は違います。

行頭の「abc」を検索するのは正規表現では「^abc」としますので
行頭の「abc」を「ABC」に変換する時は
検索のボックスに「^abc」と入力し置換のボックスに「ABC」と
入力する事でこの機能は実現できます。

もう一つ例を書きますと各行の先頭と最後にそれぞれ「(」「)」を付けたい
と思った場合も正規表現置換では簡単に変換可能です。
行頭は「^」なのですから「(」に置換
行末は「$」ですから「)」に置換する事でこの作業は成立します。

正規表現の検索ははっきり言って慣れです。
やればやるほど、正規表現の検索について気付く事があり
考えるのも早くなります。
簡単に作業を片付けたい、楽したいと思えば
そのために何をすれば良いかを言うことを考えると思いますが
正規表現もその一つになる事は間違いありません。
とになく使ってみて下さい。

最後に補完について触れたいと思います。
補完とは後ろで使用するため、一時的に確保しておく事を指します。

1行目:abcdefg
2行目:hijklmn

上の2行に対してそれぞれ「abc,def,g」「hij,klm,n」
というように区切りたいのカンマを入れたいとします。
これは法則で考えれば、「3文字,3文字,1文字」という風に変換するになります。

これを作業する時はどのようにするでしょうか?
多分手で作業する人がほとんどだと思います。
所詮2行ですからね。
と言ったら例を20000行にしてしまいます。
その場合はどうしますか?
これは正規表現では簡単にいくのですが、使わない場合は意外と大変です。
ここでは正規表現の話をするのですから使わないでどのようにするかは
考えませんので、実際に正規表現で実現する場合と
そうでない場合を比較する余力又はやる気がある人がいれば
試して見て下さい。

正規表現置換(秀丸エディタ)では以下のようにします。
検索:^¥f...¥f...¥f.¥f
置換:¥1,¥2,¥3¥4

この「¥f」で囲まれた範囲が補完されている箇所になります。
解説します。
「^」は行頭です。「...」は何か3文字と言う事になります。
そのため、上の例では行から3文字ですから「abc」「hij」がそれに該当します。
その後も「...」が続いているわけですから「def」「klm」と続き
最後の「.」が「g」「n」という事になります。
これらの「.」が「¥f」で3文字、3文字、1文字で囲まれています。
この囲まれている範囲を秀丸エディタでは頭から「¥0」「¥1」「¥2」...
というように表現します。
なので「¥0→行頭を表す記号なので特になし」
「¥1→abc又はhij」「¥2→def又はklm」「¥3→g又はn」となります。
これが置換文字となっておりそれぞれの間に「,」が入力されているので
この置換結果は期待している通り「abc,def,g」「hij,klm,n」となります。

最後にプログラムで私が良く使用していた例を出します。

<目的>
データベースで取得した項目を各変数に設定する

<状況>
データベースのカラム定義はエクセルなどで纏まっているが
C言語でいうところのmemcpyや変数名などは自分で記述する必要がある。

<エクセルを秀丸に貼り付けした状況>
#項目名<タブ>型<タブ>サイズ(この行はありません。各内容を参考までに)
A<タブ>char<タブ>5
B<タブ>char<タブ>10
C<タブ>int <タブ>

<最終的に作成したい内容>
memset(_A, 0, 5 + 1);
memcpy(_A, A, 5);
memset(_B, 0, 5 + 1);
memcpy(_B, A, 5);
_C=C;

<秀丸エディタ置換設定内容>
1回目 char型を変換
検索文字:「^.*¥f¥tchar¥t¥f[0-9]*¥f¥n」
置換文字:「memset(_¥0, 0, ¥2 + 1);\nmemcpy(_¥0, ¥0, ¥2);¥n」

2回目 int型を変換
検索文字:「^.*¥f¥tint¥t¥n」
置換文字:「_¥0 = ¥0;¥n」

ってな感じです。
これも使って使って慣れて行きます。
秀丸エディタを使用しているのであれば是非このパワーを堪能して下さい。

0 件のコメント: