全角片仮名だけを半角にするマクロはありNo.00817
ドラゴン さん 98/04/15 20:50
 

エーと、全角片仮名だけを半角にするマクロはありますが?

秀丸の標準の機能で「半角に変換」というものがありますが、

これでは、選択した文字列の中に全角の平仮名があった場合は、

それも半角片仮名に変換されてしまいます。 全角片仮名だけを

一々選択しながら変換すればいいのですが、あまりに細かく沢山

の所に散らばっていた場合は、大変面倒です。 という訳で知って

いる方がいましたら、教えて頂きたいと思います。

では、宜しくお願いします。


[ ]
RE:00817 全角片仮名だけを半角にするマクNo.00819
番頭++ さん 98/04/16 11:27
 

>エーと、全角片仮名だけを半角にするマクロはありますが?

こんなのではいかがですか ...

//「ヵヶ」が半角に変換されないのは、
//tohankaku ステートメントの「仕様」か「バグ」でしょう。

// macro (test1.mac)
//gofiletop;
//disableinvert;
//disabledraw;
//gofiletop;
while( code != eof ){
if( code >= 'ァ' && code <= 'ヶ' ){//ヴヵヶ
selectword;tohankaku;right;
} else if ( code == 0x0D ){
right;
} else {
selectword;right;
}
}
//gofiletop;
endmacro;
// end of macro.

[ ]
RE:00819 全角片仮名だけを半角にするマNo.00820
ドラゴン さん 98/04/16 13:45
 
番頭++さん、こんにちは、ドラゴンです。

早速回答して頂きまして大変有り難う御座います。

番頭++に教えて頂いたマクロですが、これは、選択範囲だけでなく、

ファイルの最後まで実行してしまいますが、これを選択範囲だけにするには

どうしたらようでしょうか?  



[ ]
RE:00820 全角片仮名だけを半角にするマNo.00821
番頭++ さん 98/04/16 15:01
 
今仕事中で忙しいので、
今日の 18:00 頃には範囲指定を付けます。

[ ]
RE:00821 全角片仮名だけを半角にするNo.00822
番頭++ さん 98/04/16 16:32
 
範囲選択終了位置判定に、特種コード (0xFF) を使用して、
素人には、少し危険なマクロですが、時間が無いので、
寄せ集めました。少し無だなコードもあります。

17:00 の会議を忘れてました。いかん、いかん ... [Esc]

番頭++

// macro (test2.mac)
//*1 【全角カタカナを半角にするマクロ】Ver. 00.四節飴 1997/04/16
//*1 「ヵヶ」が半角に変換されないのは、
//*1 tohankaku ステートメントの「仕様」か「バグ」でしょう。
//*1 【注意】
//*1 ・(注-1) 範囲選択終了位置判定に、特種コード (0xFF) を使用しています !
//*1 ・マクロを中止したときには、手作業で (0xFF) を削除してください !
//

    #sw_sel = selecting;    //  範囲選択
    #code_ff = 0xFF;    //  end of block.

    $tbl_menu1[00] = "【全角カタカナを半角にする】";
    $tbl_menu1[01] = "(&A) - All - ファイル全体を処理";
    $tbl_menu1[02] = "(&S) - Selecting - 範囲選択して処理";
    $tbl_menu1[03] = "(&Y) - Yobi - 予備です";  //  自作してください。
    #tbl_menu1 = 03 + 1;

//R if( #sw_sel ){
//R     #menu1 = 02;
//R }
        menuarray $tbl_menu1, #tbl_menu1;
        #menu1 = result - 1;
//R }

    if( #menu1 <= 00 ){ //  [Esc]
        endmacro;
    } else if ( #menu1 == 01 ){
        gofiletop;  escape;
        disableinvert;  disabledraw;
    } else if ( #menu1 == 02 ){
        if( ! #sw_sel ){
            $wk1 = "範囲選択をして、[Enter] を押してください !";
            $wk1 = $wk1 + "  [Esc] で中止します !";

//R シツコイト思ったら、以下の 4 行をコメントにしてください。
            message $wk1;
            if( iskeydown( 0x1B ) ){    //  [Esc] が押された !
                escape; endmacro;
            }

            inputpos $wk1;
            if( iskeydown( 0x1B ) ){    //  [Esc] が押された !
                escape; endmacro;
            }
            #sw_sel = selecting;    //  範囲選択
        }
        if( ! #sw_sel ){    
            $wk1 = "範囲選択は行なわれませんでした。";
            message $wk1 + "\n\nマクロを中止します !";
            endmacro;
        }
    } else if ( #menu1 == 03 ){
        message $tbl_menu1[03];
        endmacro;
    } else {
        message "ありえません !";
        endmacro;
    }
    title $tbl_menu1[00];

//R disableinvert;
//R disabledraw;

    if( #sw_sel ){
        #seltopx = seltopx; #seltopy = seltopy;
        #selendx = selendx; #selendy = selendy;
        escape;
        moveto #selendx, #selendy;
        insert char(#code_ff);  //  end of block.
        moveto #seltopx, #seltopy;
    }
    while( code != eof && code != #code_ff ){
        if( code >= 'ァ' && code <= 'ヶ' ){ //  ァア - ヴヵヶ
            selectword; tohankaku;  right;
        } else if ( code == 0x0D ){ //  改行
            right;
        } else {
            selectword; right;
        }
    }
    if( code == #code_ff ){ //  end of block.
        delete;
    }
    if( #menu1 == 01 ){
        gofiletop;
    } else if( #menu1 == 02 ){
        moveto #seltopx, #seltopy;
    }
    enableinvert;
    enabledraw;
    beep;   title 0;
endmacro;

// end of macro.

[ ]
RE:00817 全角片仮名だけを半角にするマNo.00826
ひろ さん 98/04/16 23:01
 
 ドラゴンさん今日は、ひろです。
> エーと、全角片仮名だけを半角にするマクロはありますが?
//------------- begin macro -----------------------------------------
title "カタカナを半角に置換中";
$s=searchbuffer;
#f=searchoption;
#SF=getininum("hidemaru.ini","Env","SelectFound");
if(!#SF){
  writeininum "hidemaru.ini","Env","SelectFound",1;
  envchanged;
}disabledraw;
disableinvert;
gofiletop;
searchdown "[ァ-ミム-ロワヲ-ヴー]+",regular;
while(result){
  call zen2han;
  finddown;
}findup;
if(result)call zen2han;
setsearch $s,#f;
enableinvert;
enabledraw;
endmacro;

zen2han:
  tohankaku;
  escape;
  return;
//-------------------- end macro ------------------------------------
で如何でしょうか ? searchdown 文の所に「<」等を加えればそういった全角
文字の変換対象にします。

[ ]
RE:00826 全角片仮名だけを半角にするマNo.00829
ドラゴン さん 98/04/17 10:48
 
ひろさん、こんにちは、ドラゴンです。

全角片仮名だけを半角にするマクロを作成して頂き大変有り難う御座いました。

しかも、任意の文字を追加できるのはいいですね! ただ、欲を言えば、このマクロ

も選択範囲ではなくファイル全体を変換してしまうので選択範囲でもできればGoo


かなぁ〜と思いました。 すいません欲張りで・・・!

でも、本当に有り難う御座いました。 大変助かりました。

P.S.
  本当は、自分で作れる様になればいいのだけど・・・

   

[ ]
RE:00822 全角片仮名だけを半角にするNo.00830
ドラゴン さん 98/04/17 10:59
 
番頭++さん、こんにちは、ドラゴンです。

お仕事が忙しい中、態々マクロを作り直して頂いてすいませんでした。

おかげで秀丸がますます使いやすくなってしまいました。  感謝!感謝!です。

でも、選択範囲を指定可能にする為には、思っていたより簡単にはいかないんです
ね!

なんか無理な注文を言ってしまってすいませんでした。

本当にどうも有り難う御座いました。

[ ]
RE:00830 全角片仮名だけを半角にすNo.00832
番頭++ さん 98/04/17 13:39
 
寄せ集め (リサイクル ? ) だから、大きいだけです。 むっだがオオイです。

カタカナの全角から半角変換、半角から全角変換には、色々と事情があって、色
々なソフトがありますよね。「秀丸エディタ」の tohankaku は、「ヰヱヵヶ」
は半角文字がありませんから半角にしてないみたいです。しかし「゜゛」は半角
にします。「秀丸エディタ」は別として、全角と半角を同じ文字数にする仕様で、
全角の濁音、半濁音を残す処理もあるくらいです。

「ホ゜ハ゜イ」を半角するのは簡単ですが、元に戻すのは、それなりの処理を必
要とします。「ヵヶ」を半角にするのも同じです。

RE:00817 「ひろ」さんの変換は「正規表現」で検索しているので、あちきのマ
クロより百倍から千倍速いはずです。どれくらいのデータを処理するのですか。

あちきも「真似」て「正規表現」検索にかえてます。

//// 次の部分を削除して ////
while( code != eof && code != #code_ff ){
if( code >= 'ァ' && code <= 'ヶ' ){ // ァア - ヴヵヶ
selectword; tohankaku; right;
} else if ( code == 0x0D ){ // 改行
right;
} else {
selectword; right;
}
}
if( code == #code_ff ){ // end of block.
delete;
}
//// 削除終わり ////

//// 以下のマクロで置き換えてください ////
//  「ヰヱヵヶ」は半角文字がありません !
    $str_kana1 = "[ァ-ヶー゜゛]+|\xFF"; //  end of block.
    $str_kana1 = "[ァ-ミム-ロワヲ-ヴー゜゛]+|\xFF"; //  end of block.
    searchdown $str_kana1, regular;
    while( result ){
        if( code == #code_ff ){ //  end of block.
            delete; break;
        }
        tohankaku;  escape;
        finddown;
    }
//// 置き換え終わり ////

あちきのは亜流で、
    $str_kana1 = "[ァ-ヶー゜゛]+|\xFF"; //  end of block.
「ひろ」さんのは正統派の、
    $str_kana1 = "[ァ-ミム-ロワヲ-ヴー]+|\xFF"; //  end of block.
です。|\xFF は消さないでください。

ほかの文字「<>[]、。・」とかもあるでしょうから、好みに合わせて、
カスタマイズしてください。

それと、「ひろ」さんのは
 searchbuffer、 searchoption をマクロ実行以前に保存し戻す、
マクロ実行後に前の内容を保証しています。
あちきは、その内容を保証していません。

 searchbuffer、 searchoption はマクロのヘルプを参照してください。

[ ]
RE:00832 全角片仮名だけを半角にすNo.00839
番頭++ さん 98/04/17 20:14
 
ドラゴンさん、

世間に発表するマクロでもないのですが、
あちきが満足するとこまで作成してみました。
わけありで、個人的にはいつしか、必要となります。

出来れば「マクロ機動隊」一機 マクロを、ダウンロードして、
このマクロをテストしてみてください。

    $str_kana0 = "[。「」、・ヲ-ン゙゚]+|\xFF";  //  end of block.
    $str_kana1 = "[ァ-ミム-ロワヲ-ヴー゜゛]+|\xFF"; //  end of block.

はカスタマイズしてみてください。

この、オリジナルが必要なときには、E-mail をください。送ります。
Ms Exchange のオブジェクトを受け取れる環境であれば、送くれます。

番頭++ / E-mail:xxxxxxxx@niftyserve.or.jp


//*1 *** Macro for 「秀丸エディタ」***
//*1 【マクロ名】 mudai05.mac - Ver. 01.05 - 1998/04/17
//*1 (C) Copyright mudai05. 1994 - 1998. All Rights Reserved.
//*1 【作者】 mudai05
//*1 【機能】
//*1 カタカナ、全角 <==> 半角 にするマクロ
//*1 ・【カタカナ、半角 ==> 全角 にする】の機能 または、
//*1 ・【カタカナ、全角 ==> 半角 にする】の機能
//*1 ・「ヰヱヵヶ」は半角カタカナ文字がありません !
//*1 ・マクロの不備を考慮して Undo をメニューに追加しました。
//*1 【注意】
//*1 ・(注-1) ファイルの先頭等にダミー空白を挿入して、後で削除します !
//*1 ・マクロを中止したときには、手作業でダミー空白を削除してください !
//*1 ・(注-2) 範囲選択終了位置判定に、特種コード (0xFF) を使用しています !
//*1 ・マクロを中止したときには、手作業で (0xFF) を削除してください !
//

    $searchbuffer = searchbuffer;   #searchoption = searchoption;
    #sw_sel = selecting;    //  範囲選択
    #code_ff = 0xFF;    //  end of block.

    #menu = 00; #sw_menu1 = 001;    //  初めは、逆を指定する
    $tbl_menu1[01] = "(&A) - All - ファイル全体を処理";
    $tbl_menu1[02] = "(&S) - Selecting - 範囲選択して処理";
    $tbl_menu1[03] = "(&U) - Undo - (更新) を Undo する";
    #tbl_menu1 = 03 + 1;
    while( #menu1 == 00 ){
        #sw_menu1 = ( #sw_menu1 + 1 ) % 2;
        if( #sw_menu1 == 000 ){
            $tbl_menu1[00] = "【カタカナ、半角 ==> 全角 にする】";  // 000
        } else if( #sw_menu1 == 001 ){
            $tbl_menu1[00] = "【カタカナ、全角 ==> 半角 にする】";  // 001
        }
        menuarray $tbl_menu1, #tbl_menu1;
        #menu1 = result - 1;
    }

    if( #menu1 <= 00 ){ //  [Esc]
        endmacro;
    } else if ( #menu1 == 01 ){
        gofiletop;  insertfix " ";  //  dummy space.
        escape;
        disableinvert;  disabledraw;
    } else if ( #menu1 == 02 ){
        if( ! #sw_sel ){
            $wk1 = $tbl_menu1[00];
            $wk1 = $wk1 + " 範囲選択をして、[Enter] を押してください !";
            $wk1 = $wk1 + "  [Esc] で中止します !";
//R シツコイと思ったら、以下の 4 行をコメントにしてください。
//R         message $wk1;
//R         if( iskeydown( 0x1B ) ){    //  [Esc] が押された !
//R             escape; endmacro;
//R         }
            inputpos $wk1;
            if( iskeydown( 0x1B ) ){    //  [Esc] が押された !
                escape; endmacro;
            }
            #sw_sel = selecting;    //  範囲選択
        }
        if( ! #sw_sel ){    
            $wk1 = "範囲選択は行なわれませんでした。";
            message $wk1 + "\n\nマクロを中止します !";
            endmacro;
        }
        #seltopx = seltopx; #seltopy = seltopy;
        #selendx = selendx; #selendy = selendy;
        escape;
        moveto #selendx, #selendy;
        insertfix char(#code_ff);   //  end of block.
        moveto #seltopx, #seltopy;
        insertfix " ";  //  dummy space.
        disableinvert;  disabledraw;
    } else if ( #menu1 == 03 ){ //  test undo
        call pp_test_undo1;
        endmacro;
    } else {
    }

    title $tbl_menu1[00];
    if( #sw_menu1 == 000 ){
        call pp_han_zen0;
    } else if( #sw_menu1 == 001 ){
        call pp_zen_han1;
    }
    if( #menu1 == 01 ){
        gofiletop;  delete; //  dummy space.
    } else if( #menu1 == 02 ){
        moveto #seltopx, #seltopy;  delete; //  dummy space.
    }

    enableinvert;
    enabledraw;
    beep;   title 0;
    setsearch $searchbuffer, #searchoption;
endmacro;

//  "【カタカナ、半角 ==> 全角にする】";    // 000
pp_han_zen0:
    $str_kana0 = "[。「」、・ヲ-ン゙゚]+|\xFF";  //  end of block.
    searchdown $str_kana0, regular;
    while( result ){
        if( code == #code_ff ){ //  end of block.
            delete; break;
        }
        tozenkakukata;  escape;
        finddown;
    }
return;

//  "【カタカナ、全角 ==> 半角にする】";    // 001
pp_zen_han1:
    $str_kana1 = "[ァ-ミム-ロワヲ-ヴー゜゛]+|\xFF"; //  end of block.
//R $str_kana1 = "[ァ-ヶー゜゛]+|\xFF"; //  end of block.
    searchdown $str_kana1, regular;
    while( result ){
        if( code == #code_ff ){ //  end of block.
            delete; break;
        }
        tohankaku;  escape;
        finddown;
    }
return;

//  test undo - reset updated line
pp_test_undo1:
    while( updated ){
        undo;
        if( ! result ){
            message "undo failed !";    endmacroall;
        }
    }
return;

endmacroall;

    gofiletop;  replaceall "カタカナ", "記号/特殊文字";
endmacroall;

// end of macro.

[ ]
RE:00839 全角片仮名だけを半角にNo.00840
ドラゴン さん 98/04/17 20:34
 
ネヨニャ++、オ、。「 、ウ、、ヒ、チ、マ。「・ノ・鬣エ・、ヌ、ケ。」

イソ、ォ、ケ、エ、、、ウ、ネ、ヒ、ハ、テ、ニ、、、゙、ケ、ヘ。ェ 、チ、遉テ、ネ、キ、ニエー瓏シ邨チ、ヌ、ケ、ャ。ゥ
、ヌ、筍「イソ、ォハクサ、ャ・ミ・ア・ミ・ア、ヒ、ハ、テ、ニ、、、・隍ヲ、ヌ、ケ。」 、ヌ、マ。」

[ ]
RE:00840 全角片仮名だけを半角にNo.00841
番頭++ さん 98/04/17 20:45
 
>、ヌ、筍「イソ、ォハクサ、ャ・ミ・ア・ミ・ア、ヒ、ハ、テ、ニ、、」・隍ヲ、ヌ、ケ。、ツ、ヌ、マ。」

>、チ、遉テ、ネ、キ、ニエー瓏シ邨チ、ヌ、ケ、ャ。ゥ

、、、、、ォ、イ、、ハ。「、「、チ、ュ、ャ。「。ヨ・ム。シ・ユ・ァ・ッ・ネ。ラ、ネ、、、・・・ネ。「
ハヨ、ケクタヘユ、ャ。「、「、熙゙、サ、。」

。ヨハクサイス、ア、マ。ラ。「、「、チ、ュ、ホ、サ、、、ヌ、マ、「、熙゙、サ、・...

[ ]
RE:00841 全角片仮名だけを半角No.00842
番頭++ さん 98/04/17 20:56
 
・ニ・ケ・ネ。「ハクサイス、ア。」
・爭サ・ュ・ヒ・・



[ ]
RE:00829 全角片仮名だけを半角にするマNo.00845
ひろ さん 98/04/18 00:17
 
 ドラゴンさん今日は、ひろです。
> も選択範囲ではなくファイル全体を変換してしまうので選択範囲でもできればGoo
 番頭++ さんがもうやられていますが、
//--------------------------- begin macro ---------------------------
//replace3.mac カタカナを半角に置換するマクロ
title "カタカナを半角に置換中";
if(!selecting)selectall;
#topx=seltopx;
#topy=seltopy;
#endx=selendx;
#endy=selendy;
$s=searchbuffer;
#f=searchoption;
#SF=getininum("hidemaru.ini","Env","SelectFound");
disabledraw;
disableinvert;
escape;
moveto #topx,#topy;
searchdown "[ァ-ミム-ロワヲ-ヴー「」・。、<>]+",regular;
while(result&&#endy>=seltopy){
  if(#endy>=seltopy&&#endx<=seltopx)break;
  else{
    call zen2han;
    finddown;
  }
}findup;
if(result&&#topy<=selendy&&#endx<selendx)call zen2han;
setsearch $s,#f;
enableinvert;
enabledraw;
endmacro;

zen2han:
  tohankaku;
  escape;
  return;
//------------------------- end macro -------------------------------
で如何でしょう。厳密に範囲選択内ではありませんが、実用の範囲では問題な
いと思います。

[ ]
RE:00845 全角片仮名だけを半角にするマNo.00850
ひろ さん 98/04/18 23:16
 
 自己レスです。endmacro の直前に
if(!#SF){
  writeininum "hidemaru.ini","Env","SelectFound",0;
  envchanged;
}
を入れるべきでした。これは前々回の macro にも言えます (^^;。

[ ]
RE:00839 全角片仮名だけを半角にNo.00870
ドラゴン さん 98/04/21 10:48
 
番頭++さん、こんにちは、

>//*1 *** Macro for 「秀丸エディタ」***<br>
>//*1 【マクロ名】 mudai05.mac - Ver. 01.05 - 1998/04/17 <br>
>//*1 (C) Copyright mudai05. 1994 - 1998. All Rights Reserved.<br>
>//*1 【作者】 mudai05<br>
>//*1 【機能】 <br>
>//*1 カタカナ、全角 <==> 半角 にするマクロ<br>
>//*1 ・【カタカナ、半角 ==> 全角 にする】の機能 または、<br>
>//*1 ・【カタカナ、全角 ==> 半角 にする】の機能<br>
>//*1 ・「ヰヱヵヶ」は半角カタカナ文字がありません !<br>
>//*1 ・マクロの不備を考慮して Undo をメニューに追加しました。<br>
>//*1 【注意】 <br>
>//*1 ・(注-1) ファイルの先頭等にダミー空白を挿入して、後で削除します !<br>
>//*1 ・マクロを中止したときには、手作業でダミー空白を削除してください !<br>
>//*1 ・(注-2) 範囲選択終了位置判定に、特種コード (0xFF) を使用しています !<br>
>//*1 ・マクロを中止したときには、手作業で (0xFF) を削除してください !<br>
このマクロですが、ちょっと何と説明していいかわかりませんが、何回か連続して使用

していると動作が変になります。 Undo機能は全く問題ないのですが、ファイル全体の

置換と選択範囲ので置換か全くされていないで編集マークだけが残ります。 他にも

変な現象が出た様な気がしますが、自分のオペミスかもしれないのでもうチョット

調べてみます。  それでは、

[ ]
RE:00870 全角片仮名だけを半角にNo.00872
番頭++ さん 98/04/21 12:42
 
「 RE:00839 全角片仮名だけを半角」のマクロは、レジストリの「SelectFound」
が「1」でないと動きません。これって非公開の機能なんですかね ???

「ひろ」さんの「RE:00826 全角片仮名だけを半角」を実行した後に、「 RE:
00839」を実行すると正常ですが、「RE:00850 全角片仮名だけを半角」の修正を
すると、「SelectFound」は「0」になり、「 RE:00839」は正常に動きません。
ということになります。

「 RE:00839 全角片仮名だけを半角」マクロのある部分に、

> title $tbl_menu1[00];

の次に、

writeininum "hidemaru.ini","Env","SelectFound",1;
envchanged;

を追加して、

マクロの終了部分に、

> setsearch $searchbuffer, #searchoption;
> endmacro;

の行を、

setsearch $searchbuffer, #searchoption;
writeininum "hidemaru.ini","Env","SelectFound",0;
envchanged;
endmacro;

とすると動くはずです。しかしマクロを中断すると「SelectFound」が「1」のま
まになることがあります。

このようなバグですか ???

test1.mac は「SelectFound」を表示します。

test2.mac は「SelectFound」を「0」にします。

// test1.mac
    $$wk1 = "SelectFound";
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    if( ! result ){ message "openreg - faild 1. ";  endmacroall;    }
    #i = getregnum( $$wk1 );
    closereg;
    message str(#i); // こ結果を見てください - 0 or 1 ???
endmacro;

// test2.mac
    $$wk1 = "SelectFound";
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    if( ! result ){ message "openreg - faild 1. ";  endmacroall;    }
    writeregnum $$wk1, 0; // reset to 0
//R writeregnum $$wk1, 1; // set to 1
    #i = getregnum( $$wk1 );
    closereg;
    envchanged;
    message str(#i);
endmacro;

それとも、範囲選択をしても、ファイル全体を処理したいとか ???

「 RE:00839 全角片仮名だけを半角」マクロのある部分に、

>} else if ( #menu1 == 01 ){
>gofiletop; insertfix " "; // dummy space.
>escape;

の行を、

} else if ( #menu1 == 01 ){
escape;
gofiletop; insertfix " "; // dummy space.

にしてください。バグでした。

それとも違うバグかな ???


[ ]
RE:00872 全角片仮名だけを半角No.00875
noro さん 98/04/21 16:31
 
番頭++さんこんにちは(^^) noro です。
横から失礼をば…<(_ _)>

》「 RE:00839 全角片仮名だけを半角」のマクロは、レジストリの「SelectFound」
》が「1」でないと動きません。これって非公開の機能なんですかね ???

 レジストリの SelectFound は、秀丸の「動作環境」→「ユーザーインター
フェース」の「検索での表示」の「点滅表示」or「選択する」の設定状態( 0 の時点
滅表示、1 の時選択する)をあらわすものだったのではないかと思います。
 マクロから動作環境の設定状態等を確認する時、レジストリのどのキーを読
むか、あるいは、設定を変更する時、どのキーに対して変更するかは、マクロ
ヘルプ等には記載されていません。
 私は、記載されていない理由として、レジストリをいじくるマクロを組む時
には、自分がいじろうとしているキーが何なのかを自力で確認できる様になり
なさいと言うことなのだろうと勝手に納得してたりします(^^;)

 と、いうわけで、非公開の機能ではなくて、手動でしたら前述の「動作環境
の設定」から操作することができます。

 ひろさんのマクロの場合、前述の検索での表示の設定が「選択する」になって
いないと正常動作しないので、レジストリからその状況を把握し、必要であれ
ば一時的に書き換え、書き換えを行った場合に元に戻す動作をする仕組みのよ
うですね。

 そう解釈すると、#00845 のマクロ中で、
#SF=getininum("hidemaru.ini","Env","SelectFound");
の行の後に、
if(!#SF){
  writeininum "hidemaru.ini","Env","SelectFound",1;
  envchanged;
}
が抜けてると思います。これについては、あとでひろさんからコメントがある
と思いますが…(^^)

 それにしても、確認がすばやいですね(^。^)>番頭++さん


[ ]
RE:00875 全角片仮名だけを半角No.00876
番頭++ さん 98/04/21 19:22
 
noro さん、またまたお世話になりました。

自分のレジストリは、しっかと「SelectFound」が「1」なんですよ、
Vz からの Hidemaru 移行組みなので 「FoundFix」も「1」です。

これは、「秀丸エディタ」マクロヘルプの内容ですが、

「レジストリの内容については独自に調べてください。(^^;」
と書いてあります。

おまけに、「例」では、

「writeregstr "Path", "c:\users\hm32"」
「writeregint "Count", 100」

となっていますね。"Path" なんて無いのにね。
writeregint には、参った ...

個人的には、「禁断のレジストリ」操作は、人には薦めません。

> 非公開の機能ではなくて、手動でしたら前述の「動作環境
> の設定」から操作することができます。

と言うことなので、「 RE:00839 全角片仮名だけを半角」マクロの仕様は、
[動作環境] - [ユーザーインタフェース] の
「検索での表示」を「選択する」にして使用して下さい。でないと動きません。

>それにしても、確認がすばやいですね(^。^)>番頭++さん

「Debugger」って仕事が世の中にあるんですけど、若いときにはそうだったんです。

隠されているのか 「execcommand;」なんかは公開してほしいですよね。

ではまた ...

[ ]
RE:00876 全角片仮名だけを半角No.00878
ドラゴン さん 98/04/21 20:37
 

番頭++さん、度々すいません。 ドラゴンです。

番頭++さんに教えて頂いた通りマクロを修正し、かつ、設定を
 [動作環境] - [ユーザーインタフェース] の
 「検索での表示」を「選択する」にしてもだめでしたが、
マクロの修正方法がいけなかったのでしょうか?
ちなみに、このマクロを実行後、[動作環境] - [ユーザーインタフェース] の
 「検索での表示」の所を見ると「点滅表示」に変わっています。

以下の修正後のマクロを添付しますので、チェックを
お願いします。 あと、このマクロって、半角全角のカナ混在していた場合は
どうなるんでしょうか? いろいろテストしていたら全く動作しなくなったので
訳が分からなくなってしまいました。

 //*1 *** Macro for 「秀丸エディタ」***
 //*1 【マクロ名】 mudai05.mac - Ver. 01.05 - 1998/04/17
 //*1 (C) Copyright mudai05. 1994 - 1998. All Rights Reserved.
 //*1 【作者】 mudai05
 //*1 【機能】
 //*1 カタカナ、全角 <==> 半角 にするマクロ
 //*1 ・【カタカナ、半角 ==> 全角 にする】の機能 または、
 //*1 ・【カタカナ、全角 ==> 半角 にする】の機能
 //*1 ・「ヰヱヵヶ」は半角カタカナ文字がありません !
 //*1 ・マクロの不備を考慮して Undo をメニューに追加しました。
 //*1 【注意】
 //*1 ・(注-1) ファイルの先頭等にダミー空白を挿入して、後で削除します !
 //*1 ・マクロを中止したときには、手作業でダミー空白を削除してください !
 //*1 ・(注-2) 範囲選択終了位置判定に、特種コード (0xFF) を使用しています !
 //*1 ・マクロを中止したときには、手作業で (0xFF) を削除してください !
 //

 $searchbuffer = searchbuffer; #searchoption = searchoption;
 #sw_sel = selecting; // 範囲選択
 #code_ff = 0xFF; // end of block.

 #menu = 00; #sw_menu1 = 001; // 初めは、逆を指定する
 $tbl_menu1[01] = "(&A) - All - ファイル全体を処理";
 $tbl_menu1[02] = "(&S) - Selecting - 範囲選択して処理";
 $tbl_menu1[03] = "(&U) - Undo - (更新) を Undo する";
 #tbl_menu1 = 03 + 1;
 while( #menu1 == 00 ){
 #sw_menu1 = ( #sw_menu1 + 1 ) % 2;
 if( #sw_menu1 == 000 ){
 $tbl_menu1[00] = "【カタカナ、半角 ==> 全角 にする】"; // 000
 } else if( #sw_menu1 == 001 ){
 $tbl_menu1[00] = "【カタカナ、全角 ==> 半角 にする】"; // 001
 }
 menuarray $tbl_menu1, #tbl_menu1;
 #menu1 = result - 1;
 }

 if( #menu1 <= 00 ){ // [Esc]
 endmacro;
 } else if ( #menu1 == 01 ){
 escape;
 gofiletop; insertfix " "; // dummy space.
 disableinvert; disabledraw;
 } else if ( #menu1 == 02 ){
 if( ! #sw_sel ){
 $wk1 = $tbl_menu1[00];
 $wk1 = $wk1 + " 範囲選択をして、[Enter] を押してください !";
 $wk1 = $wk1 + " [Esc] で中止します !";
 //R シツコイと思ったら、以下の 4 行をコメントにしてください。
 //R message $wk1;
 //R if( iskeydown( 0x1B ) ){ // [Esc] が押された !
 //R escape; endmacro;
 //R }
 inputpos $wk1;
 if( iskeydown( 0x1B ) ){ // [Esc] が押された !
 escape; endmacro;
 }
 #sw_sel = selecting; // 範囲選択
 }
 if( ! #sw_sel ){
 $wk1 = "範囲選択は行なわれませんでした。";
 message $wk1 + "\n\nマクロを中止します !";
 endmacro;
 }
 #seltopx = seltopx; #seltopy = seltopy;
 #selendx = selendx; #selendy = selendy;
 escape;
 moveto #selendx, #selendy;
 insertfix char(#code_ff); // end of block.
 moveto #seltopx, #seltopy;
 insertfix " "; // dummy space.
 disableinvert; disabledraw;
 } else if ( #menu1 == 03 ){ // test undo
 call pp_test_undo1;
 endmacro;
 } else {
 }

 title $tbl_menu1[00];
 writeininum "hidemaru.ini","Env","SelectFound",1;
 envchanged; if( #sw_menu1 == 000 ){

 call pp_han_zen0;
 } else if( #sw_menu1 == 001 ){
 call pp_zen_han1;
 }
 if( #menu1 == 01 ){
 gofiletop; delete; // dummy space.
 } else if( #menu1 == 02 ){
 moveto #seltopx, #seltopy; delete; // dummy space.
 }

 enableinvert;
 enabledraw;
 beep; title 0;
 setsearch $searchbuffer, #searchoption;
 writeininum "hidemaru.ini","Env","SelectFound",0;
 envchanged;
 endmacro;

 // "【カタカナ、半角 ==> 全角にする】"; // 000
 pp_han_zen0:
 $str_kana0 = "[。「」、・ヲ-ン゙゚]+|\xFF"; // end of block.
 searchdown $str_kana0, regular;
 while( result ){
 if( code == #code_ff ){ // end of block.
 delete; break;
 }
 tozenkakukata; escape;
 finddown;
 }
 return;

 // "【カタカナ、全角 ==> 半角にする】"; // 001
 pp_zen_han1:
 $str_kana1 = "[ァ-ミム-ロワヲ-ヴー゜゛]+|\xFF"; // end of block.
 //R $str_kana1 = "[ァ-ヶー゜゛]+|\xFF"; // end of block.
 searchdown $str_kana1, regular;
 while( result ){
 if( code == #code_ff ){ // end of block.
 delete; break;
 }
 tohankaku; escape;
 finddown;
 }
 return;

 // test undo - reset updated line
 pp_test_undo1:
 while( updated ){
 undo;
 if( ! result ){
 message "undo failed !"; endmacroall;
 }
 }
 return;

 endmacroall;

 gofiletop; replaceall "カタカナ", "記号/特殊文字";
 endmacroall;

 // end of macro.

どうも、マクロについて知識がないので、番頭++さん、ひろさん、noroさんの話に
ついていけなくてすいません。(-_-;)

[ ]
RE:00878 全角片仮名だけを半No.00882
番頭++ さん 98/04/22 13:42
 
> あと、このマクロって、半角全角のカナ混在していた場合は
> どうなるんでしょうか?

【カタカナ、半角 ==> 全角 にする】の機能 または、
【カタカナ、全角 ==> 半角 にする】の機能 は、
このメニューで [Enter] を押すと機能が交互に変わります。
この説明でわかりますか ???

 [動作環境] - [ユーザーインタフェース] の
「検索での表示」はどちらでもいいです。

> いろいろテストしていたら全く動作しなくなったので
> 訳が分からなくなってしまいました。

自分のディスクの中には、ほとんど半角のデータが無いので、
テストし難いんです。言い訳になっていませんが。
とりあえずマクロを一部かえました。

インターネットに半角カタカナは流したくないので、
マクロ中、次の行の 「ヲ-ン゛゜」は自分で半角カタカナにしてください。
$str_kana0 = "[ヲ-ン゛゜]+|\xFF"; // end of block.
「-」は半角です。

// 不要なコメントは取り除きました。

$searchbuffer = searchbuffer; #searchoption = searchoption;
#sw_sel = selecting; // 範囲選択
#code_ff = 0xFF; // end of block.

#menu = 00; #sw_menu1 = 001; // 初めは、逆を指定する
$tbl_menu1[01] = "(&A) - All - ファイル全体を処理";
$tbl_menu1[02] = "(&S) - Selecting - 範囲選択して処理";
$tbl_menu1[03] = "(&U) - Undo - (更新) を Undo する";
#tbl_menu1 = 03 + 1;
while( #menu1 == 00 ){
#sw_menu1 = ( #sw_menu1 + 1 ) % 2;
if( #sw_menu1 == 000 ){
$tbl_menu1[00] = "【カタカナ、半角 ==> 全角 にする】"; // 000
} else if( #sw_menu1 == 001 ){
$tbl_menu1[00] = "【カタカナ、全角 ==> 半角 にする】"; // 001
}
menuarray $tbl_menu1, #tbl_menu1;
#menu1 = result - 1;
}

if( #menu1 <= 00 ){ // [Esc]
endmacro;
} else if ( #menu1 == 01 ){
escape;
gofiletop; insertfix " "; // dummy space.
disableinvert; disabledraw;
} else if ( #menu1 == 02 ){
if( ! #sw_sel ){
$wk1 = $tbl_menu1[00];
$wk1 = $wk1 + " 範囲選択をして、[Enter] を押してください !";
$wk1 = $wk1 + " [Esc] で中止します !";
inputpos $wk1;
if( iskeydown( 0x1B ) ){ // [Esc] が押された !
escape; endmacro;
}
#sw_sel = selecting; // 範囲選択
}
if( ! #sw_sel ){
$wk1 = "範囲選択は行なわれませんでした。";
message $wk1 + "\n\nマクロを中止します !";
endmacro;
}
#seltopx = seltopx; #seltopy = seltopy;
#selendx = selendx; #selendy = selendy;
escape;
moveto #selendx, #selendy;
insertfix char(#code_ff); // end of block.
moveto #seltopx, #seltopy;
insertfix " "; // dummy space.
disableinvert; disabledraw;
} else if ( #menu1 == 03 ){ // test undo
call pp_test_undo1;
endmacro;
} else {
}

title $tbl_menu1[00];
#selectfound = getininum("hidemaru.ini","Env","SelectFound");
if( ! #selectfound ){
 writeininum "hidemaru.ini", "Env","SelectFound", 1;
 envchanged;
}
if( #sw_menu1 == 000 ){
call pp_han_zen0;
} else if( #sw_menu1 == 001 ){
call pp_zen_han1;
}
if( #menu1 == 01 ){
gofiletop; delete; // dummy space.
} else if( #menu1 == 02 ){
moveto #seltopx, #seltopy; delete; // dummy space.
}

enableinvert;
enabledraw;
beep; title 0;
setsearch $searchbuffer, #searchoption;
if( ! #selectfound ){
 writeininum "hidemaru.ini", "Env", "SelectFound", 0;
 envchanged;
}
endmacro;

// "【カタカナ、半角 ==> 全角にする】"; // 000
pp_han_zen0:
$str_kana0 = "[ヲ-ン゛゜]+|\xFF"; // end of block.
searchdown $str_kana0, regular;
while( result ){
if( code == #code_ff ){ // end of block.
delete; break;
}
tozenkakukata; escape;
finddown;
}
return;

// "【カタカナ、全角 ==> 半角にする】"; // 001
pp_zen_han1:
$str_kana1 = "[ァ-ミム-ロワヲ-ヴー゛゜]+|\xFF"; // end of block.
searchdown $str_kana1, regular;
while( result ){
if( code == #code_ff ){ // end of block.
delete; break;
}
tohankaku; escape;
finddown;
}
return;

// test undo - reset updated line
pp_test_undo1:
while( updated ){
undo;
if( ! result ){
message "undo failed !"; endmacroall;
}
}
return;

pp_011:
gofileend;
searchup "ヲ-ン゛゜";findup;
if( result ){
escape;selectword;tohankaku;right 2;
selectword;tohankaku;right;
selectword;tohankaku;escape;
gofileend;
}
endmacroall;
// end of macro.


[ ]
RE:00882 全角片仮名だけを半No.00883
ドラゴン さん 98/04/22 18:48
 

番頭++さん、こんにちは、ドラゴンです。

【カタカナ、半角 ==> 全角 にする】の機能、【カタカナ、全角 ==> 半角 にする】の機能
ともに問題なくできました。 このマクロの使い方(このメニューで [Enter] を押すと機能
が交互に変わります。)がわかっていないだけの様でした。

いろいろお手数をおかけしてすいませんでした。
 

[ ]
RE:00875 全角片仮名だけを半角No.00885
ひろ さん 98/04/22 23:24
 
 noroさん今日は、ひろです。
>  そう解釈すると、#00845 のマクロ中で、
> #SF=getininum("hidemaru.ini","Env","SelectFound");
> の行の後に、
> if(!#SF){
>   writeininum "hidemaru.ini","Env","SelectFound",1;
>   envchanged;
> }
> が抜けてると思います。これについては、あとでひろさんからコメントがある
 おっしゃる通りです (^^;。
 一日一度しか access しないので、この tree の肥大化に着いていけなく
なっています m(_|_)m。念の為、再度 up しておきます。
//-------------------------------------------------------------------
title "カタカナを半角に置換中";
if(!selecting)selectall;
#topx=seltopx;
#topy=seltopy;
#endx=selendx;
#endy=selendy;
$s=searchbuffer;
#f=searchoption;
#SF=getininum("hidemaru.ini","Env","SelectFound");
if(!#SF){
  writeininum "hidemaru.ini","Env","SelectFound",1;
  envchanged;
}disabledraw;
disableinvert;
escape;
moveto #topx,#topy;
searchdown "[ァ-ミム-ロワヲ-ヴー「」・。、<>]+",regular;
while(result&&#endy>=seltopy){
  if(#endy==seltopy&&#endx<seltopx)break;
  else{
    call zen2han;
    finddown;
  }
}findup;
if(result&&#topy<=selendy&&#endx<selendx)call zen2han;
setsearch $s,#f;
enableinvert;
enabledraw;
if(!#SF){
  writeininum "hidemaru.ini","Env","SelectFound",0;
  envchanged;
}endmacro;

zen2han:
  tohankaku;
  escape;
  return;
//-------------------------------------------------------------------

[ ]