特定文字(列)を無視した検索No.17009
おしょう さん 04/04/09 09:51
 
以前、改行・空白を無視した検索について質問して、あほをかましたおしょうです。
恥をしのんでの再質問です。
その発展でなのですが、特定の文字(列)を無視した検索をする方法はありますでし
ょうか。
あいまい検索の設定で同一視ファイルを作り、無視させてみようとしましたがうまく
いきませんでした。

[ ]
RE:17009 特定文字(列)を無視した検索No.17010
秀まるお2 さん 04/04/09 10:02
 
 HmJre.dllを改造して、特定の文字を無視させるように作ることは可能です。

 特定の「文字列」を無視させるのは少々難しいと思います。

 具体的にどういう文字(または文字列)を無視させるのか等の例を教えて頂け
れば、例えばそれが正規表現でカバーできる物かどうか等はお返事できると思い
ます。

[ ]
RE:17010 特定文字(列)を無視した検索No.17013
おしょう さん 04/04/09 15:29
 
さっそくの返答で強縮しております。

特定の「文字」とは半角の
*,+,^
の3字で、脚註などのマークに使っているもの、

特定の「文字列」(実際には特定の書式の行)は
P--nnnn    (n:半角数字)
で、元テキストのページを表しています。(正規表現で ^P(.)+\n とすればこの行が
指定できるのはわかります。)

どちらも検索語の「中」に挟まれてしまうことがあり得るため、「無視」した検索が
できないものかと考えております。

宜しくお願いいたします。

[ ]
RE:17013 特定文字(列)を無視した検索No.17015
秀まるお2 さん 04/04/09 16:42
 
> 特定の「文字」とは半角の
> *,+,^
> の3字で、脚註などのマークに使っているもの、

 これだけなら対応可能です。

> 特定の「文字列」(実際には特定の書式の行)は
> P--nnnn    (n:半角数字)

 これへの対応は無理だと思います。

-----------
 そういうことで良ければ、上記「任意の文字を無視するオプション」というこ
とでHmJre.dllを機能追加する程度の修正は可能です。

 どうでしょうか?

[ ]
RE:17013 特定文字(列)を無視した検索No.17019
山紫水明 さん 04/04/09 17:07
 
 おしょうさん,こんにちは。

》特定の「文字」とは半角の
》*,+,^
》の3字で、脚註などのマークに使っているもの、

》特定の「文字列」(実際には特定の書式の行)は
》P--nnnn    (n:半角数字)

 以下のようなマクロを実行した後に,上検索,下検索を実行してみたらいい
かもしれません。
 特定文字については でHmJre.dll のオプションとしてつけて頂けそうなので
不用になるとは思いますが。
 なお,田楽DLLが必要です。

//------------------------------------------------------------------//
$s1 = input("検索文字列");
if( $s1 == "" ) endmacro;
menu "&1 特定文字をスキップ", "&2 特定文字列をスキップ";
#r = result;
if( #r == 0 ) endmacro;
else if( #r == 1 ) $skip = input( "スキップ文字(複数可)","+*^" );
else $skip = input( "スキップ文字列", "P--[0-9]+|\\n");
if( $skip == "" ) endmacro;
if( #r == 1 ) $skip = "[" + $skip + "]*";
else if( #r == 2 ) $skip = "(" + $skip + ")*";
loaddll "DENGAKUDLL.dll";//田楽DLL
#len = dllfunc( "STRLEN2", $s1 );
while( #i < #len - 1 ) {
    $s2 = $s2 + dllfuncstr( "MIDSTR2", $s1, #i, 1 ) +$skip;
    #i = #i + 1;
}
$s2 = $s2 + dllfuncstr( "MIDSTR2", $s1, #i, 1 );
freedll;
setsearch $s2, 16;
endmacro;
//------------------------------------------------------------------//

     では, (^^)/~
                                        山紫水明

[ ]
RE:17019 特定文字(列)を無視した検索No.17021
おしょう さん 04/04/09 17:50
 
秀まるお2様、

特定文字のスキップだけでも対応いただけると助かります。宜しくお願いいたしま
す。

山紫水明様、

さっそくのマクロご提案、ありがとうございます。ただ、検索文字列(不特定長)の
どこに改頁が入るかわからず、

ほにゃほにゃほにゃ検索語句ほにゃ
ほにゃほにゃほにゃほにゃほ検索語
句ほにゃほにゃほにゃほにゃほにゃ
ほにゃほにゃほにゃほにゃほに検索
P--0002
語句ほにゃほにゃほにゃほにゃほに

などの「検索語句」すべてにヒットさせようと思うと、少し無理かと思うのです
が…。

おしょう

[ ]
RE:17021 特定文字(列)を無視した検索No.17025
山紫水明 さん 04/04/09 20:35
 
 おしょうさん,こんばんは。

》ただ、検索文字列(不特定長)のどこに改頁が入るかわからず、

》ほにゃほにゃほにゃ検索語句ほにゃ
》ほにゃほにゃほにゃほにゃほ検索語
》句ほにゃほにゃほにゃほにゃほにゃ
》ほにゃほにゃほにゃほにゃほに検索
》P--0002
》語句ほにゃほにゃほにゃほにゃほに

》などの「検索語句」すべてにヒットさせようと思うと、少し無理かと思うので
》すが…。

 こちらでは,

検索文字列:「検索語句」
スキップ文字列:「P--[0-9]+|\n」(デフォルトで示したスキップ語)

で,少なくとも上記の3つはすべてヒットしますが,そうなりませんか。どれが
ヒットしないのでしょう。
 「動作環境」→「検索」→「検索での表示」を「範囲選択」にしておかないと,
ヒットの様子はよくわかりませんが。

     では, (^^)/~
                                        山紫水明

[ ]
RE:17021 特定文字(列)を無視した検索No.17026
白雲斎 さん 04/04/09 21:31
 
白雲斎と申します。

過去の投稿の焼き直しです。
一応、下記の「検索語句」には3つともヒットします。

ほにゃほにゃほにゃ検索語句ほにゃ
ほにゃほにゃほにゃほにゃほ検索語
句ほにゃほにゃほにゃほにゃほにゃ
ほにゃほにゃほにゃほにゃほに検索
P--0002
語句ほにゃほにゃほにゃほにゃほに

※検索キーワードの文字数が多いと、正規表現が長大になるので
 実用に耐ええるかは分かりません。参考としてお考えください。


// マクロ ここから -------------------------------------------
// 拡張検索
$META = "\\$()-|[]+*{}.?";
$BYPASS = "[+*^\\t\\n  ]*(P\-\-[0-9]+)?[+*^\\t\\n  ]*";

if( selecting )
{
    getsearch;
    $s = searchbuffer;
}
else
{
    $s = "";
}

// 入力する検索キーワードに正規表現は使用出来ません。
$s = input("検索キーワード入力\n※メタ文字のエスケープは不要", $s);
if( result == false || $s == "" ) endmacro;

$keyword = "";
$a = char(ascii($s));
while( true )
{
    call RegexEsc $a;
    $keyword = $keyword + $$return + $BYPASS;
    $s = rightstr($s, strlen($s) - strlen($a));
    $a = char(ascii($s));
    if( strlen($s) == strlen($a) )
    {
        call RegexEsc $s;
        $keyword = $keyword + $$return;
        break;
    }
}
searchdown2 $keyword, regular;
endmacro;
// マクロ ここまで -------------------------------------------

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

[ ]
RE:17026 特定文字(列)を無視した検索No.17027
白雲斎 さん 04/04/09 21:59
 
白雲斎と申します。
このところ間抜けばかりをしています。
サブ・ルーチンが抜けたまま投稿してしまいました。
以下、修正版です。(失礼しました)


// マクロ ここから -------------------------------------------
// 拡張検索
$META = "\\$()-|[]+*{}.?";
$BYPASS = "[+*^\\t\\n  ]*(P\-\-[0-9]+)?[+*^\\t\\n  ]*";

if( selecting )
{
    getsearch;
    $s = searchbuffer;
}
else
{
    $s = "";
}

// 入力する検索キーワードに正規表現は使用出来ません。
$s = input("検索キーワード入力\n※メタ文字のエスケープは不要", $s);
if( result == false || $s == "" ) endmacro;

$keyword = "";
$a = char(ascii($s));
while( true )
{
    call RegexEsc $a;
    $keyword = $keyword + $$return + $BYPASS;
    $s = rightstr($s, strlen($s) - strlen($a));
    $a = char(ascii($s));
    if( strlen($s) == strlen($a) )
    {
        call RegexEsc $s;
        $keyword = $keyword + $$return;
        break;
    }
}
searchdown2 $keyword, regular;
endmacro;

RegexEsc:
    if( $$1 != "" && strstr($META, $$1) != -1 ) return "\\" + $$1;
return $$1;
// マクロ ここまで -------------------------------------------

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

[ ]
RE:17026 特定文字(列)を無視した検索No.17029
おしょう さん 04/04/09 22:17
 
白雲斎様、

(前回は思わぬ幕切れで、あいさつもしないままでした。失礼致しました。)

続けてマクロのご提供、ありがとうございます。

失礼ながら、同等な(考え方の同じ)マクロは、私も作っていたのです。しかしご指
摘のように、どこまで実用になるか怖くて、これはきっと考え方が間違っているに違
いない、根本的に別の発想があるはずだと思って質問させていただいた次第です。

(実際、ご提供のマクロでは、〔私の環境では〕全角7文字までが限界のようでし
た。)

[ ]
RE:17025 特定文字(列)を無視した検索No.17030
おしょう さん 04/04/10 01:06
 
山紫水明様、

前回は十分な動作確認をする前に、早とちりで返信してしまい、大変失礼いたしまし
た。

あらためてマクロをきちんと読んでみて、確かにこれなら3つともヒットするはずと
動作確認をし直したところ、うまく動作する「こともある」のが確認できました。何
とも訳がわからず、田楽dll も最新のものに入れ直してみたのですが、まだ理由が突
き止められていません。

ただ、ここから先は私の問題(機械ないしOSそのものに不安定要素がある可能性が
高い)かと思いますし、アルゴリズムとして、検索文字列のすべての文字間に無視し
たい文字(列)をはさむという考え方そのものは考慮した上での問い合わせであった
とご理解いただけたらと存じます。

(マクロで対応しようとすると、結局そういう方法しかないのでしょうか。そうと納
得できればそれで十分なのですが。)

かえって失礼にならなければよいがと心配しつつ。

おしょう

[ ]
RE:17030 特定文字(列)を無視した検索No.17031
山紫水明 さん 04/04/10 08:42
 
 おしょうさん,こんにちは。

》うまく動作する「こともある」のが確認できました。何とも訳がわからず、田
》楽dll も最新のものに入れ直してみたのですが、まだ理由が突き止められてい
》ません。

 同じ条件でそういうことが起きるのですか? 不思議ですね。
 こちらでは全角文字でしたら検索文字16字くらいまではOKです。

》ただ、ここから先は私の問題(機械ないしOSそのものに不安定要素がある可
》能性が高い)かと思いますし、

 あるいはそういうこともあるかもしれません。

》アルゴリズムとして、検索文字列のすべての文字間に無視したい文字(列)を
》はさむという考え方そのものは考慮した上での問い合わせであったとご理解い
》ただけたらと存じます。

 そうでしたか。私のコメントは余計なものだったようですね。失礼しました。

》(マクロで対応しようとすると、結局そういう方法しかないのでしょうか。そ
》うと納得できればそれで十分なのですが。)

 ちょっと思いつきませんね。「他にない」と断言するだけの力は私にはありま
せんが。

     では, (^^)/~
                                        山紫水明

[ ]
RE:17031 特定文字(列)を無視した検索No.17032
おしょう さん 04/04/10 18:12
 
山紫水明様、

前回はせっかくのご好意にいかにも素っ気無い返答で、何とも失礼しました。どうも
キーバッファが不安定な印象がずっとあったため、それを疑っていたのですが、結局
OSを入れなおし、秀丸・田楽dll とも最新のバージョンにした上で、なお次の「菩
薩」は検索できないことが突き止められました。最初は unicode の関係かと思って
いたのですが、どうも「薩」の文字コードがからむようです。そうなると少し手に余
ります。

=== 検索用データ:この「菩薩」をすべて検索したい

この*賢劫のなかの一切の菩薩、また賢護等の十六*正士、善思議菩
P--0004
薩・信慧菩薩・…

=== データ終わり

当方としては、貴氏ならびに白雲斎様のご提案も参考にして自前のマクロをチューニ
ングし、8文字までは大丈夫になりましたので、とりあえずよしとさせていただくこ
とにしました。以上、ご報告として伝えさせていただきます。

これに懲りず、今後とも宜しくお願いいたします。

おしょう

[ ]
RE:17032 特定文字(列)を無視した検索No.17033
山紫水明 さん 04/04/10 20:51
 
 おしょうさん,こんばんは。

》=== 検索用データ:この「菩薩」をすべて検索したい

 おしょうさんにとっては,菩薩が探せないのは,さぞお困りでしょう。菩薩様
も時々お隠れになるのでしょうか?(^^;

 マクロの最後の方,
setsearch $s2, 16;

setsearch $s2, 48;
としたら,こちらではすべて見つけることができました。
あいまい検索で「メーカー別拡張漢字を同一視.txt」を設定しています。

     では, (^^)/~
                                        山紫水明(ユーザー)

[ ]
RE:17033 特定文字(列)を無視した検索No.17043
秀まるお2 さん 04/04/13 00:15
 
 HmJre.dll側にて、任意の文字を無視して検索するオプションを用意しますの
で、それまで少々お待ちください。

 (今ちょっと、鶴亀メールのバグ調査出来てないのでまだ手が付けられませ
ん)

[ ]
RE:17043 特定文字(列)を無視した検索No.17045
秀まるお2 さん 04/04/13 17:00
 
 今アップロードしました。

  http://www.hidemaru.interlink.or.jp/software/bin/hmjre109.lzh

[ ]
RE:17045 特定文字(列)を無視した検索No.17066
おしょう さん 04/04/14 18:30
 
秀まるお2様、

ありがとうございます。今ダウンロードして、使ってみました。これなら実用上用が
済みます。

勝手な要望にさっそくの対応、感謝しております。

合掌 (おしょう)

[ ]