マクロで検索一覧のときに中国語で検索がNo.00648
kiwikazuya さん 07/07/28 00:46
 
中国在住のkiwikazuyaです。

検索一覧を作成するマクロを作成しました。
検索文字列をコピーしてから、そのコピーした文字列を
使用して検索一覧を作成します。
日本語はできるのですが、中国語はできません。
これは仕様なのでしょうか?
マクロで中国語からも検索一覧を作成するように
ならないでしょうか?

よろしくお願いいたします。

参考までに、作成したマクロです。

loaddll "TKInfo.dll";

 beginclipboardread;
 $s = getclipboard;
 //$s = input( "検索対象文字列は?" );
 $s = dllfuncstr( "YenEncode", $s );
 #n = dllfunc( "SetFindPack", "(\"" + $s + "\", target=body)");
 #n = dllfunc("DoGrep", "Calender", "User\\calender");

[ ]
RE:00648 マクロで検索一覧のときに中国語No.00650
秀まるお さん 07/07/28 10:35
 
 秀丸マクロのgetclipboardはユニコード非対応なので、クリップボードに中国
語が入っていてマクロを実行してるエディタが中国語以外のエンコードになって
いると、マクロはうまく動作しないです。

 固定の中国語文字列を検索するマクロなら書けますが、クリップボード中の中
国語文字列を検索するとなると、今の秀丸メールでは無理なんじゃないかと思い
ます。

 画面の中で範囲選択した中国語文字列を検索するってことならなんとかがんば
って出来ると思いますけど、それなりにマクロを工夫しないと難しいです。なん
でしたらこのマクロだけ考えて差し上げることは可能かと思いますけど。

[ ]
RE:00650 マクロで検索一覧のときに中国語No.00652
kiwikazuya さん 07/07/28 10:41
 
> 画面の中で範囲選択した中国語文字列を検索するってことならなんとかがんば
>って出来ると思いますけど、それなりにマクロを工夫しないと難しいです。なん
>でしたらこのマクロだけ考えて差し上げることは可能かと思いますけど。

ぜひぜひお願いいたします。
日本語は日本語用のマクロ、
中国語は中国語用で作成していただいたマクロの
2つで運用できればうれしいです。

お手数ですが、よろしくお願いいたします。
いつもいつも中国語関係でお世話になっていまして、
ありがとうございます。

[ ]
RE:00652 マクロで検索一覧のときに中国語No.00656
秀まるお さん 07/07/29 00:51
 
 範囲選択した文字列を検索するマクロの例を作ってみました。

 簡体字中国語/繁体字中国語ならうまく動作すると思いますが、ユニコードの
メール上ではうまく動作しないです。

    loaddll "tkinfo.dll";
    if( charset == 9 ) {
        $charset = "gb2312";
    } else if( charset == 10 ) {
        $charset = "big5";
    } else if( charset == 8 ) {
        $charset = "euro";
    } else if( charset == 11 ) {
        $charset = "korea";
    }
    #x1 = seltopx;
    #y1 = seltopy;
    #x2 = selendx;
    #y2 = selendy;

    if( selecting ) escape;
    #browse = browsemode;
    if( #browse ) browsemodeswitch;
    moveto #x1, #y1;
    $s = "";
    while( x != #x2 && y <= #y2 ) {
        #code = code;
        if( #code == 0 && unicode != 0 ) {
            message "ユニコード文字はダメです。";
            endmacro;
        }
        if( #code == 13 ) {
            break;
        }
        if( #code >= 0x100 ) {
            #code2 = #code / 256;
            #code = #code & 0xFF;
            $s = $s + "\\x" + hex(#code2);
        }
        if( #code < 0x7F ) {
            $s = $s + char(#code);
        } else {
            $s = $s + "\\x" + hex(#code);
        }
        right;
    }
    if( #browse ) browsemodeswitch;
    $pack = "(\"" + $s + "\", target=body)";
    if( $charset != "" ) {
        $pack = $pack + ", charset=" + $charset;
    }
    #n = dllfunc( "SetFindPack", $pack );
    #n = dllfunc("DoGrep", "Calender", "User\\calender");

[ ]
RE:00656 マクロで検索一覧のときに中国語No.00658
kiwikazuya さん 07/07/29 09:35
 
> 範囲選択した文字列を検索するマクロの例を作ってみました。
>
> 簡体字中国語/繁体字中国語ならうまく動作すると思いますが、ユニコードの
>メール上ではうまく動作しないです。

ありがとうございます。
簡体字中国語コードのメールでうまく動作します。
ただ、わたしは中国語メールヘッダのメモに日本語を使うときもあり、
そうすると日本語が文字化けてしまうのですべてのメールを
ユニコードで受信しています。

そのため、ユニコードメールでもうまく動作するようには、
どうしたらよろしいのでしょうか?

よろしくお願いいたします。



[ ]
RE:00658 マクロで検索一覧のときに中国語No.00662
秀まるお さん 07/07/29 22:07
 
 以下のマクロてどうでしょ?

 一応これで、ユニコードメール中の簡体字中国語はうまく検索出来てると思い
ます。

 繁体字中国語についてテストしてみたんですが、文字コード的には「繁体字中
国語には存在するけども簡体字中国語には存在しない(文字コード的にマッチす
る物が無い)ってケースが分からなくて、結果、そういう状況のテストが出来ま
せんでした。なのでそれでうまく動くかどうかはいまいち分からないです。

    loaddll "tkinfo.dll";
    if( charset == 9 ) {
        $charset = "gb2312";
    } else if( charset == 10 ) {
        $charset = "big5";
    } else if( charset == 8 ) {
        $charset = "euro";
    } else if( charset == 11 ) {
        $charset = "korea";
    }
    #x1 = seltopx;
    #y1 = seltopy;
    #x2 = selendx;
    #y2 = selendy;

    if( selecting ) escape;
    #browse = browsemode;
    if( #browse ) browsemodeswitch;
    moveto #x1, #y1;
    $s = "";
    while( x != #x2 && y <= #y2 ) {
        #code = code;
        if( #code == 0 && unicode != 0 ) {
            goto Retry_gb2312;
        }
        if( #code == 13 ) {
            break;
        }
        if( #code >= 0x100 ) {
            #code2 = #code / 256;
            #code = #code & 0xFF;
            $s = $s + "\\x" + hex(#code2);
        }
        if( #code < 0x7F ) {
            $s = $s + char(#code);
        } else {
            $s = $s + "\\x" + hex(#code);
        }
        right;
    }
Retry_return:
    if( #browse ) browsemodeswitch;
    $pack = "(\"" + $s + "\", target=body)";
    if( $charset != "" ) {
        $pack = $pack + ", charset=" + $charset;
    }
    #n = dllfunc( "SetFindPack", $pack );
    message $pack;
    #n = dllfunc("DoGrep", dllfuncstr("CurrentAccount"), "");
    endmacro;

Retry_gb2312:
    moveto #x1, #y1;
    beginsel;
    moveto #x2, #y2;
    copy;
    #n = dllfunc("NewMail");
    gofiletop;
    beginsel;
    gofileend;
    delete;
    #n = dllfunc("SetCharSet", "gb2312", 1);
    paste;
    moveto 0, 0;
    while( 1 ) {
        #code = code;
        if( #code < 0 ) {
            break;
        }
        if( #code == 0 && unicode != 0 ) {
            goto Retry_Big5;
        }
        if( #code == 13 ) {
            break;
        }
        if( #code >= 0x100 ) {
            #code2 = #code / 256;
            #code = #code & 0xFF;
            $s = $s + "\\x" + hex(#code2);
        }
        if( #code < 0x7F ) {
            $s = $s + char(#code);
        } else {
            $s = $s + "\\x" + hex(#code);
        }
        right;
        if( !result ) {
            break;
        }
    }
    #handle = hidemaruhandle(0);
    #n = dllfunc("SetMainWndTop");
    closehidemaruforced #handle;
    $charset = "gb2312";
    goto Retry_return;

Retry_Big5:
    gofiletop;
    beginsel;
    gofileend;
    delete;
    #n = dllfunc("SetCharSet", "gb2312", 1);
    paste;
    moveto 0, 0;
    while( 1 ) {
        #code = code;
        if( #code < 0 ) {
            break;
        }
        if( #code == 0 && unicode != 0 ) {
            #handle = hidemaruhandle(0);
            #n = dllfunc("SetMainWndTop");
            closehidemaruforced #handle;
            message "簡体字中国語でも繁体字中国語でもダメでした。";
            endmacro;
        }
        if( #code == 13 ) {
            break;
        }
        if( #code >= 0x100 ) {
            #code2 = #code / 256;
            #code = #code & 0xFF;
            $s = $s + "\\x" + hex(#code2);
        }
        if( #code < 0x7F ) {
            $s = $s + char(#code);
        } else {
            $s = $s + "\\x" + hex(#code);
        }
        right;
        if( !result ) {
            break;
        }
    }
    #handle = hidemaruhandle(0);
    #n = dllfunc("SetMainWndTop");
    closehidemaruforced #handle;
    $charset = "big5";
    goto Retry_return;

[ ]
RE:00662 マクロで検索一覧のときに中国語No.00664
kiwikazuya さん 07/07/29 23:09
 
> 以下のマクロてどうでしょ?
お手数をおかけしています。
マクロを作成していただいてありがとうございます。

うまくできるときとできないときがあります。
うまくできるときは、日本語と中国語で一部?です。
うまくできないときは、中国語でメッセージを見ると
コピーした文字列の先頭に何かわからない文字が
付加されているときと、
たとえば、Re: Re: Re: 什候可以新的票方式?のとき、
このコピーした文字列の先頭にRe: Re: Re: と何か
わからない文字が付加されているときです。

これが回避できるとうまく検索して一覧が作成できそうです。
よろしくお願いいたします。

[ ]
RE:00664 マクロで検索一覧のときに中国語No.00665
秀まるお さん 07/07/30 08:09
 
 すみません。バグってました。

Retry_gb2312:

 の後ろと

Retry_Big5:

 の後ろ(直後)に、

    $s = "";

 を入れれば直ると思います。

[ ]
RE:00665 マクロで検索一覧のときに中国語No.00666
kiwikazuya さん 07/07/30 08:42
 
ありがとうございます。
うまく動作するようになりました。

マクロもっと勉強しなくちゃです。

[ ]