|
しょ さん、こんばんわ。
提供していただいた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;
//------------切り取り------------
|
|