RE:00072 【要望】宛先名挿入マクロ Ver1.No.00077
プックン さん 07/05/13 23:55
 
しょ さん、こんばんわ。
提供していただいたiniファイルを利用してデバックしてみました。
連絡していただいた事象を確認しました。

原因はつきとめることは出来ていません。
あやしいところは見つけました。
なぜか敬称で"センター長"という定義があると、正規表現を利用したマッチ判定
でうまくいっていないようです。
"センター長"=>"センタ長"長音記号を削除するとなぜかうまくいきました。
正規表現のマッチに利用させていただいているPerl 互換正規表現ライブラリ BREGEX
P.DLL
のふるまい(かな?)が、なぜかそのようになっているようです。

h-tomさんから教えてもらった情報で、田楽DLL+BREGEXP.DLLではなく
hmjre.dllでできるかもしれないので、こちらでもトライしてみます。

//------------切り取り------------
call Dengaku ;
//田楽dllの機能を利用
//田楽DLLVer2.0x〜にて対応
//BRE_LOAD
//使い方:#n = dllfunc("BRE_LOAD", $s1);
//説明:Babaさん作の Perl 互換正規表現ライブラリ BREGEXP.DLL を ロードします。
//引数:
// $s1:BREGEXP.DLL のパス名
// フォルダを省略するか、空文字列を指定すると、 OS標準のDLL検索方法
// により BREGEXP.DLL を探します。
//返り値:DLL のロードに成功した場合は 1、失敗した場合は 0 を返します。
//例:
if (!dllfunc("BRE_LOAD", hidemarudir + "\\BREGEXP.DLL")) {
 message "BREGEXP.DLL が見つかりません";
 freedll;
 endmacro;
}

 //田楽dllの機能を利用
 //田楽DLLVer2.0x〜にて対応
 //BRE_MATCH
 //使い方:$pos = dllfuncstr("BRE_MATCH", $ptn, $str);
 //説明:与えられた正規表現パターンに一致する部分文字列の範囲を返します。
 //なお、パターン中の丸括弧に一致する部分は BRE_GETNEXT(), BRE_HASMOR
 //ERESULTS() で 取得することができます。
 //引数:
 // $ptn:正規表現パターン文字列
 // $str:検索対象文字列
 //返り値:$str 中の $ptn にマッチした範囲を表す文字列。
 //書式は以下の通り。
 //   head:len
 //   head:マッチした範囲の先頭位置(0 から数えます)
 //   len:マッチした範囲のバイト数
 //パターンに一致する部分がなかったときは "" を返します。
 ##j = 0;
 //while
 //3通りを実施する。
 while( ##j < 7 ) {
  if(##j == 0){
   $$reg_keisyou = "(教授|部長|次長|課長|係長|主任|補佐|局長|事務長|センター
長|先生|様|殿|さん|御中)" ;
   ##i = 0 ;
   $$wk [##i] = "教授" ; ##i = ##i + 1;
   $$wk [##i] = "部長" ; ##i = ##i + 1;
   $$wk [##i] = "次長" ; ##i = ##i + 1;
   $$wk [##i] = "課長" ; ##i = ##i + 1;
   $$wk [##i] = "係長" ; ##i = ##i + 1;
   $$wk [##i] = "主任" ; ##i = ##i + 1;
   $$wk [##i] = "補佐" ; ##i = ##i + 1;
   $$wk [##i] = "局長" ; ##i = ##i + 1;
   $$wk [##i] = "事務長" ; ##i = ##i + 1;
   $$wk [##i] = "センター長" ; ##i = ##i + 1;
   $$wk [##i] = "先生" ; ##i = ##i + 1;
   $$wk [##i] = "様" ; ##i = ##i + 1;
   $$wk [##i] = "殿" ; ##i = ##i + 1;
   $$wk [##i] = "さん" ; ##i = ##i + 1;
   $$wk [##i] = "御中" ; ##i = ##i + 1;
   $$title = "しょさんini" ;
  }
  else if(##j == 1){
   $$reg_keisyou = "(教授|部長|次長|課長|係長|主任|補佐|局長|事務長|先生|様|
殿|さん|御中)" ;
   ##i = 0 ;
   $$wk [##i] = "教授" ; ##i = ##i + 1;
   $$wk [##i] = "部長" ; ##i = ##i + 1;
   $$wk [##i] = "次長" ; ##i = ##i + 1;
   $$wk [##i] = "課長" ; ##i = ##i + 1;
   $$wk [##i] = "係長" ; ##i = ##i + 1;
   $$wk [##i] = "主任" ; ##i = ##i + 1;
   $$wk [##i] = "補佐" ; ##i = ##i + 1;
   $$wk [##i] = "局長" ; ##i = ##i + 1;
   $$wk [##i] = "事務長" ; ##i = ##i + 1;
   $$wk [##i] = "先生" ; ##i = ##i + 1;
   $$wk [##i] = "様" ; ##i = ##i + 1;
   $$wk [##i] = "殿" ; ##i = ##i + 1;
   $$wk [##i] = "さん" ; ##i = ##i + 1;
   $$wk [##i] = "御中" ; ##i = ##i + 1;
   $$title = "しょさんini(センター長削除)" ;
  }
  else if(##j == 2){
   $$reg_keisyou = "(教授|部長|次長|課長|係長|主任|補佐|局長|事務長|先生|様|
殿|さん|御中|センター長)" ;
   ##i = 0 ;
   $$wk [##i] = "教授" ; ##i = ##i + 1;
   $$wk [##i] = "部長" ; ##i = ##i + 1;
   $$wk [##i] = "次長" ; ##i = ##i + 1;
   $$wk [##i] = "課長" ; ##i = ##i + 1;
   $$wk [##i] = "係長" ; ##i = ##i + 1;
   $$wk [##i] = "主任" ; ##i = ##i + 1;
   $$wk [##i] = "補佐" ; ##i = ##i + 1;
   $$wk [##i] = "局長" ; ##i = ##i + 1;
   $$wk [##i] = "事務長" ; ##i = ##i + 1;
   $$wk [##i] = "センター長" ; ##i = ##i + 1;
   $$wk [##i] = "先生" ; ##i = ##i + 1;
   $$wk [##i] = "様" ; ##i = ##i + 1;
   $$wk [##i] = "殿" ; ##i = ##i + 1;
   $$wk [##i] = "さん" ; ##i = ##i + 1;
   $$wk [##i] = "御中" ; ##i = ##i + 1;
   $$title = "しょさんini(センター長を後ろに移動)" ;
  }
  else if(##j == 3){
   $$reg_keisyou = "(教授|部長|次長|課長|係長|主任|補佐|局長|事務長|センタ長
|先生|様|殿|さん|御中)" ;
   ##i = 0 ;
   $$wk [##i] = "教授" ; ##i = ##i + 1;
   $$wk [##i] = "部長" ; ##i = ##i + 1;
   $$wk [##i] = "次長" ; ##i = ##i + 1;
   $$wk [##i] = "課長" ; ##i = ##i + 1;
   $$wk [##i] = "係長" ; ##i = ##i + 1;
   $$wk [##i] = "主任" ; ##i = ##i + 1;
   $$wk [##i] = "補佐" ; ##i = ##i + 1;
   $$wk [##i] = "局長" ; ##i = ##i + 1;
   $$wk [##i] = "事務長" ; ##i = ##i + 1;
   $$wk [##i] = "センタ長" ; ##i = ##i + 1;
   $$wk [##i] = "先生" ; ##i = ##i + 1;
   $$wk [##i] = "様" ; ##i = ##i + 1;
   $$wk [##i] = "殿" ; ##i = ##i + 1;
   $$wk [##i] = "さん" ; ##i = ##i + 1;
   $$wk [##i] = "御中" ; ##i = ##i + 1;
   $$title = "しょさんini(センター長の長音記号'ー'を削除)" ;
  }
  else if(##j == 4){
   $$reg_keisyou = "(殿|様|社長殿|取締役殿|顧問殿|C殿|室長殿|PK殿|tK殿|K殿|J
B殿|JD殿|B殿|BD殿|TB殿|tB殿)" ;
   ##i = 0 ;
   $$wk [##i] = "殿" ; ##i = ##i + 1;
   $$wk [##i] = "様" ; ##i = ##i + 1;
   $$wk [##i] = "社長殿" ; ##i = ##i + 1;
   $$wk [##i] = "取締役殿" ; ##i = ##i + 1;
   $$wk [##i] = "顧問殿" ; ##i = ##i + 1;
   $$wk [##i] = "C殿" ; ##i = ##i + 1;
   $$wk [##i] = "室長殿" ; ##i = ##i + 1;
   $$wk [##i] = "PK殿" ; ##i = ##i + 1;
   $$wk [##i] = "tK殿" ; ##i = ##i + 1;
   $$wk [##i] = "K殿" ; ##i = ##i + 1;
   $$wk [##i] = "JB殿" ; ##i = ##i + 1;
   $$wk [##i] = "JD殿" ; ##i = ##i + 1;
   $$wk [##i] = "B殿" ; ##i = ##i + 1;
   $$wk [##i] = "BD殿" ; ##i = ##i + 1;
   $$wk [##i] = "TB殿" ; ##i = ##i + 1;
   $$wk [##i] = "tB殿" ; ##i = ##i + 1;
   $$title = "プックンini" ;
  }
  else if(##j == 5){
   $$reg_keisyou = "(殿|様|社長殿|取締役殿|顧問殿|C殿|室長殿|PK殿|tK殿|K殿|J
B殿|JD殿|B殿|BD殿|TB殿|tB殿|センター長)" ;
   ##i = 0 ;
   $$wk [##i] = "殿" ; ##i = ##i + 1;
   $$wk [##i] = "様" ; ##i = ##i + 1;
   $$wk [##i] = "社長殿" ; ##i = ##i + 1;
   $$wk [##i] = "取締役殿" ; ##i = ##i + 1;
   $$wk [##i] = "顧問殿" ; ##i = ##i + 1;
   $$wk [##i] = "C殿" ; ##i = ##i + 1;
   $$wk [##i] = "室長殿" ; ##i = ##i + 1;
   $$wk [##i] = "PK殿" ; ##i = ##i + 1;
   $$wk [##i] = "tK殿" ; ##i = ##i + 1;
   $$wk [##i] = "K殿" ; ##i = ##i + 1;
   $$wk [##i] = "JB殿" ; ##i = ##i + 1;
   $$wk [##i] = "JD殿" ; ##i = ##i + 1;
   $$wk [##i] = "B殿" ; ##i = ##i + 1;
   $$wk [##i] = "BD殿" ; ##i = ##i + 1;
   $$wk [##i] = "TB殿" ; ##i = ##i + 1;
   $$wk [##i] = "tB殿" ; ##i = ##i + 1;
   $$wk [##i] = "センター長" ; ##i = ##i + 1;
   $$title = "プックンini(センター長を追加)" ;
  }
  else{
   $$reg_keisyou = "(殿|様|社長殿|取締役殿|顧問殿|C殿|室長殿|PK殿|tK殿|K殿|J
B殿|JD殿|B殿|BD殿|TB殿|tB殿|センタ長)" ;
   ##i = 0 ;
   $$wk [##i] = "殿" ; ##i = ##i + 1;
   $$wk [##i] = "様" ; ##i = ##i + 1;
   $$wk [##i] = "社長殿" ; ##i = ##i + 1;
   $$wk [##i] = "取締役殿" ; ##i = ##i + 1;
   $$wk [##i] = "顧問殿" ; ##i = ##i + 1;
   $$wk [##i] = "C殿" ; ##i = ##i + 1;
   $$wk [##i] = "室長殿" ; ##i = ##i + 1;
   $$wk [##i] = "PK殿" ; ##i = ##i + 1;
   $$wk [##i] = "tK殿" ; ##i = ##i + 1;
   $$wk [##i] = "K殿" ; ##i = ##i + 1;
   $$wk [##i] = "JB殿" ; ##i = ##i + 1;
   $$wk [##i] = "JD殿" ; ##i = ##i + 1;
   $$wk [##i] = "B殿" ; ##i = ##i + 1;
   $$wk [##i] = "BD殿" ; ##i = ##i + 1;
   $$wk [##i] = "TB殿" ; ##i = ##i + 1;
   $$wk [##i] = "tB殿" ; ##i = ##i + 1;
   $$wk [##i] = "センタ長" ; ##i = ##i + 1;
   $$title = "プックンini(センター長の長音記号'ー'を削除)" ;
  }

  //while文
  //各敬称を繰り返し処理をする
  ##cnt = 0;
  while( ##cnt < ##i ) {
   $$s = "プックン" + $$wk[##cnt] ;
   $$match = dllfuncstr("BRE_MATCH", "/" + $$reg_keisyou + "$/", $$s);
   //返り値:BRE_GETNEXT() によってまだ範囲情報が取得できる場合は 0 でない値、
   //そうでなければ 0 を返します。
   if (dllfunc("BRE_HASMORERESULTS")) {
    $$p = dllfuncstr("BRE_GETNEXT");
    $$match = $$match +"----" +  dllfuncstr("BRE_POSTOSTR", $$p) ;
   }
   if($$match =="")
    $$mes ="match判定結果=NG" ;
   else
    $$mes ="match判定結果=Good" ;
   message
    "title=" + $$title + "\n" +
    "名前=" + $$s + "\n" +
    "正規表現の敬称=" + $$reg_keisyou + "\n" +
    "マッチした敬称=" + $$match + "\n" +
    $$mes ;

   ##cnt = ##cnt + 1;
  }

  ##j = ##j + 1;
 }


##n = dllfunc("BRE_FREE"); // 使い終わったら BRE_FREE() で開放

LEND:
 freedll;
 endmacro;
Dengaku:
 // 田楽DLLのロード
 if(existfile(hidemarudir+"\\DengakuDLL.dll"))loaddll hidemarudir+"\\Dengaku
DLL.dll";
 else {
  $$mes = "田楽DLLが見つかりませんでした。\n" +
    "田楽DLLを秀丸エディタインストールディレクトリにおいてください。\n" +
    "  秀丸エディタインストールディレクトリ:\n\t"+hidemarudir + "\n\n" +
    "田楽DLL ダウンロードURL\n"+
    "  http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/\n" +
    $info ;
  message $$mes ;
  goto LEND ;
 }

 if (!result) {
  message "田楽DLL をロードできませんでした。"+$info;
  goto LEND ;
 }
return;
//------------切り取り------------

[ ]
RE:00077 【要望】宛先名挿入マクロ Ver1.No.00078
プックン さん 07/05/14 01:06
 
しょ さん、こんばんわ。
>h-tomさんから教えてもらった情報で、田楽DLL+BREGEXP.DLLではなく
>hmjre.dllでできるかもしれないので、こちらでもトライしてみます。

修正を実施したマクロをuploadしてみました。
よければ、また試してみてください。

[ ]
RE:00078 【要望】宛先名挿入マクロ Ver1.No.00079
しょ さん 07/05/16 12:32
 
プックン様

Ver1.12 ダウンロードさせていただきました。
特に問題なく動作しております。
大変便利になりました。ありがとうございます。
引き続き使わせていただきます。


[ ]
RE:00079 【要望】宛先名挿入マクロ Ver1.No.00080
プックン さん 07/05/18 02:01
 
しょさん、こんばんわ。

動作報告ありがとうございました。
無事に動作するようになってよかったです。

[ ]
RE:00080 【要望】宛先名挿入マクロ Ver1.No.00081
しょ さん 07/05/18 10:12
 
プックン様

色々とお手数おかけいたしました。
便利に使わせていただいております。
どうもありがとうございます。

[ ]