算用数字から漢数字への変換No.04182
cho-bi さん 04/03/11 16:22
 
 はじめまして、cho-bi と申します。
 長編論文数十本の体裁を整える作業で秀丸を利用しております。

 そこで質問なのですが、算用数字(アラビア数字)を漢数字に変換する際に、二桁の
数字には間に「十」を入れ、それ以外はそのまま漢数字に直す、といったことをマク
ロを使ってできるでしょうか。
 具体的には、「2」「356」「4890」などは「二」「三五六」「四八九〇」に変換
(これは置換を使って簡単にできます)。
 一方二桁の数字「20」「36」「59」などは「二十」「三十六」「五十九」に変換し
たいのです。
 文書内に有る数字はだいたい半角ですが、全角もあるかもしれません。

 ネットでマクロを探しましたが、二桁の数字の書式だけを違えて変換するようなマ
クロが見当たらず、質問させて頂いた次第です。いまは手作業でやっているのですが、
締切がせまってきて少しあせっています。よろしくお願いします。

秀丸は4.10β22、またWindowsはWindows2000です。

[ ]
RE:04182 算用数字から漢数字への変換No.04183
ENCODINGSHIFTJIS さん 04/03/11 17:23
 
置換 正規表現
[^0-9][0-9]\f[0-9][^0-9]
\0十\1

二桁の数字の間に 十 が入る
行頭、行末のパターンと全角のパターンをさらに
実行して、二桁数字を処理済みにする。
以下 単数字の全置換。

[ ]
RE:04183 算用数字から漢数字への変換No.04184
Iranoan さん 04/03/11 17:47
 
 cho-bi さん今日は、Iranoan です。
> 置換 正規表現
> [^0-9][0-9]\f[0-9][^0-9]
> \0十\1
 これで殆どの場合良いと思いますが、行頭/行末の時は上手くいかないと思
います。そこでまず、
>  文書内に有る数字はだいたい半角ですが、全角もあるかもしれません。
との事なので、
//全角数字を半角に変換するマクロ
disabledraw;
call save_search;
call Zen2Han;
call reset_search;
endmacro;

save_search://*******検索状態を保存
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  #reg_search=getregnum("SelectFound");
  if(!#reg_search){
    writeregnum "SelectFound",1;
    envchanged;
  }
  closereg;
  return;

reset_search://******検索を初期状態に戻す
  if(!#reg_search){
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound",#reg_search;
    envchanged;
    closereg;
  }
  return;

Zen2Han:
  setsearch "[0-9]+",16;
  finddown2;
  while( result ) {
    tohankaku;
    escape;
    finddown;
  }
  escapeinselect;
  return;
//--------------------------------------------------------------------
で、半角に変換します。その後、次の正規表現を用いた置換で、2 桁の数字の
変換は上手くいくと思います。
検索文字列:(?<![0-9])[0-9]\f[0-9](?![0-9])
置換文字列:\0十\1

[ ]
RE:04184 算用数字から漢数字への変換No.04185
cho-bi さん 04/03/11 23:21
 
 ENCODINGSHIFTJIS さん、Iranoan さん、どうもありがとうございました。

 まずENCODINGSHIFTJIS さんの方法で試させて頂き、「行頭、行末のパターン」が
よく分かりませんでしたので(すみません)、Iranoan さんの方法を使わせて頂きまし
た。
 二桁数字の間に「十」がはさまれ、たとえば「2十7」となったところで、2と7を二
と七に置換すれば良いのですね。これでかなり助かりました。ありがとうございまし
た。

 ただ少しわがままかもしれませんが、たとえば「12」は「十二」としたいのですが、
「一十二」となり、また「10」や「20」も「十」「二十」としたいのに「一十〇」
「二十〇」となってしまいます。
 ですが、これは「一十」や「十〇」を「十」に置換する、という方法で大丈夫そう
ですね。やってみたいと思います。
 どうもありがとうございました。

[ ]
RE:04185 算用数字から漢数字への変換No.04186
白雲斎 さん 04/03/12 03:10
 
白雲斎と申します。

時間があったのでマクロを作って見ました。
役立つようであれば、使ってみてください。

// マクロ ここから -------------------
$sb = searchbuffer;
#so = searchoption;

$zn[0] = "〇";
$zn[1] = "一";
$zn[2] = "二";
$zn[3] = "三";
$zn[4] = "四";
$zn[5] = "五";
$zn[6] = "六";
$zn[7] = "七";
$zn[8] = "八";
$zn[9] = "九";

disabledraw;
gofiletop;
searchdown2 "[0-90-9]+", regular;
while( result )
{
    tohankaku;
    #tx = seltopx;
    #ty = seltopy;
    #ex = selendx;
    #ey = selendy;
    $buff = gettext(#tx, #ty, #ex, #ey);
    escape; // 念のため
    if( strlen($buff) == 2 ) call toZen2c $buff;
    else call toZen $buff;
    beginsel;
    moveto #ex, #ey;
    insert $$return;
    finddown;
}
gofiletop;
enabledraw;
setsearch $sb, #so;
endmacro;

toZen:
    $$n = "";
    ##l = strlen($$1);
    ##i = 0;
    while( ##i < ##l )
    {
        $$n = $$n + $zn[val( midstr($$1, ##i, 1) )];
        ##i = ##i + 1;
    }
return $$n;

toZen2c:
    ##ln = val(leftstr($$1, 1));
    ##rn = val(rightstr($$1, 1));
    if( ##ln == 1 ) return "十" + $zn[##rn];
    else if( ##rn == 0 ) return $zn[##ln] + "十";
return $zn[##ln] + "十" + $zn[##rn];
// マクロ ここまで -------------------


__________________________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/

[ ]
RE:04186 算用数字から漢数字への変換No.04187
cho-bi さん 04/03/12 09:33
 
 白雲斎 さん、ありがとうございます!!

 さっそく試してみましたが、「12」は「十二」、「20」は「二十」にばっちり変換
できました。
 ただ、「10」だけはなぜか「十〇」になってしまいます…。(また、実際に論文の
中では使われていないので問題は無いのですが、試しにやってみたテキストの中にた
またまあった「00」が「〇十」になりました。
)
 って、これくらいは自分で何とかしないといけませんね。頂いたマクロをじっくり
眺め(半分はよく分かってないのですが)、いろいろやってみたいと思います。

 本当にどうもありがとうございました。

[ ]
RE:04187 算用数字から漢数字への変換No.04188
白雲斎 さん 04/03/12 12:46
 
白雲斎と申します。

失礼しました。
そこまで深く考えないで投稿しました。

先のマクロの最後の部分(“toZen2c:”行以降)を、
以下の文に置き換えてください。


toZen2c:
    if( $$1 == "10" ) return "十";
    ##ln = val(leftstr($$1, 1));
    ##rn = val(rightstr($$1, 1));
    if( ##ln == 1 ) return "十" + $zn[##rn];
    else if( ##ln == 0 ) return $zn[##ln] + $zn[##rn];
    else if( ##rn == 0 ) return $zn[##ln] + "十";
return $zn[##ln] + "十" + $zn[##rn];


__________________________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/

[ ]
RE:04188 算用数字から漢数字への変換No.04189
cho-bi さん 04/03/12 16:59
 
 白雲斎 さん、どうもありがとうございました!!
 すべてばっちり、希望どおりの動作になりました。本当に何から何までお世話にな
りまして、大感謝です。ありがとうございました。

[ ]