全半角変換に正規表現をNo.07231
deku さん 13/04/01 11:26
 
ZenhanDaisho.mac の変換速度は格段に速くてありがたく使わせていただいています。
変換条件に行頭の数字は、そのままで、他を変換する手はあるでしょうか。章立て行
を全角、本文内を半角のに指定するようなことを思っています。あるいは、すでにあ
りましたらお教えくださるでしょうか。

[ ]
RE:07231 全半角変換に正規表現をNo.07232
秀丸担当 さん 13/04/01 12:42
 

秀丸エディタ V8.20以降であれば、置換を使って正規表現を使ったルールで変換
する方法があります。

[検索]→[置換...]で、例えば、以下のようにします。

検索文字列:^[^0-90-9].*
置換文字列:\(0,ToHankakuAlnum)
「正規表現」をON

以下のサンプルテキストで全置換すると、

123ABC
DEF
GHI

以下のようになります。

123ABC
DEF
GHI


これはV8.20以降で使える変換モジュールを使う方法で、詳しくはヘルプの
[目次]− [検索系コマンド]− [正規表現]−[置換の時の、変換モジュールによ
る変換の指定 ]
のところに書かれています。

マクロの場合は、正規表現の「\」は「\\」と書く必要があって、以下のような
マクロにするといいと思います。

setcompatiblemode 0x20000;
replaceallfast "^[^0-90-9].*", "\\(0,ToHankakuAlnum)", regular;

[ ]
RE:07232 全半角変換に正規表現をNo.07233
deku さん 13/04/02 10:31
 
お答えくださりありがとうございます。
>置換文字列:\(0,ToHankakuAlnum)
うまく置換できました。助かります。ただ、動作が少し遅いようようです。それと、
ZenhanDaisho.mac のように文字種を選択できれば、なおありがたいのですが…。

[ ]
RE:07233 全半角変換に正規表現をNo.07234
秀丸担当 さん 13/04/03 08:37
 

置換は、置換ダイアログから行うと画面を描画しながらやるので遅いですが、
「スピードアップ」ボタンを押すと速くなると思います。
またはマクロのほうはスピードアップと同じになっています。

マクロは秀丸エディタで標準で備える変換を使っているもので、[編集]→[変換]
のメニューにあるものでしたら、以下のような感じで作れますが、対象を英字の
み、数字のみ、とするようなことになってくると、ちょっとややこしいことにな
ってきて、簡単にはいかないと思います。

setcompatiblemode 0x20000;
menu "大文字",
     "小文字",
     "英数字/記号/空白を全角",
     "英数字/記号/空白を半角";
#r = result;
$rule ="^[^0-90-9].*";
if(#r==1){
  replaceallfast $rule, "\\(0,ToUpper)", regular;
} else if(#r==2){
  replaceallfast $rule, "\\(0,ToLower)", regular;
} else if(#r==3){
  replaceallfast $rule, "\\(0,ToZenkakualnum)", regular;
} else if(#r==4){
  replaceallfast $rule, "\\(0,ToHankakuAlnum)", regular;
}

[ ]
RE:07234 全半角変換に正規表現をNo.07235
deku さん 13/04/04 22:35
 
ご親切に対応してくださり感謝しております。
望みどおりできるようになりました。それも一瞬にして変換できますので感動です。
ここまでしていただいて何ですが、全体変換と共に“領域指定したところのみの変換
”というをお教えくださるでしょうか。

[ ]
RE:07235 全半角変換に正規表現をNo.07237
秀丸担当 さん 13/04/05 17:20
 

選択範囲のみの置換は、replaceallfast文に inselectをつければいいです。

まとめて具体的に書くと以下のような感じになります。

setcompatiblemode 0x20000;
menu "大文字",
     "小文字",
     "英数字/記号/空白を全角",
     "英数字/記号/空白を半角";
#r = result;
$rule ="^[^0-90-9].*";
if(#r==1){
  $replace = "\\(0,ToUpper)";
} else if(#r==2){
  $replace = "\\(0,ToLower)";
} else if(#r==3){
  $replace = "\\(0,ToZenkakualnum)";
} else if(#r==4){
  $replace = "\\(0,ToHankakuAlnum)";
}
if( $replace != "" ) {
  if( selecting ) {
    replaceallfast $rule, $replace, regular, inselect;
  } else {
    replaceallfast $rule, $replace, regular;
  }
}

[ ]
RE:07237 全半角変換に正規表現をNo.07240
deku さん 13/04/06 14:40
 
ありがとうございます。囲み部分の変換ができました。
これで、ずいぶんと作業効率が上がるようになり嬉しいです。

[ ]