マスキング処理No.34457
matushiro97 さん 15/09/18 08:26
 
作成したコードの量の多さを人に証明するためにコードを全部PDF化して提供しなけ
ればならないのですが、そのままコピーされないように部分的にマスキングします。
ファイル数が20個くらいあるので、一つ一つファイルを開いて手作業するのは大変な
ので以下の処理を一括でおこうなことはできますか。

1、処理パターン1の
単語5個に1個をマスキング処理(実際には文字数分*で置き換えでよい)を施す。

または
2、処理パターン2
5行に1行を丸ごと文字全部をマスキング処理を行う。

よろしくお願いします。


[ ]
RE:34457 マスキング処理No.34460
秀丸担当 さん 15/09/18 10:06
 

マクロを作れば、いずれの処理もできると思います。

マクロを使わずできるだけ簡単にするとしたら、キーボードの記録と再生が簡単
です。
最近あったスレッドでは以下のスレッドが参考になると思います。
http://www.maruo.co.jp/hidesoft/2/x34412_.html

例えば、[マクロ]→[キー操作の記録開始/終了]で、単語右を4回してから、1
つの単語を選び、*****を入力する、という操作を記録し、[マクロ]→[キー操作
の再生]で再生を繰り返すと、それに近いことになると思います。
または下矢印キーを4回押してから、一行選択し、*****とEnterを入力とすると
「2」の処理に近いと思います。

[マクロ]→[キー操作の保存...]で記録したものを保存してから、disabledrawで
描画を抑制してから、ループするようにするとそれなりに速くなります。

例えば5行ごとに****の行にする操作を記録すると、「キー操作の保存...」で
保存されたマクロは以下のようになります。

    setcompatiblemode 0x0F;
    down 4;
    beginsel;
    down;
    insert "****";
    insertreturn;

これに描画の抑制とループして最終行までを加えると、以下のようになります。

    setcompatiblemode 0x0F;
    disabledraw;
    while(1){
        down 4;
        beginsel;
        down;
        insert "****";
        insertreturn;
       
        if(lineno==linecount2)break;
    }


または、例えば、「複数選択予約」(キー割り当ての「クリップボード系」)で、
複数のマスクする範囲を追加していき、最後に「複数選択予約を選択」で選択し
てから、変換モジュールで変換して、文字数はそのままで「*」に置き換える方
法も考えられます。

colderさん作の「正規表現置換」や、「HmfListReplace.hmf 変換リストによる
置換」が使えると思います。
変換モジュールは、変換モジュールライブラリからダウンロードできます。
http://hide.maruo.co.jp/lib/hmconv/index.html
これを使うと、選択した範囲を「*」に置換するのがやりやすいです。

参考までの情報として、現在β版のV8.56では、置換ダイアログで「追加の条
件」を指定することで、複数のマスクされた範囲だけに絞って全置換する方法も
あります。

[ ]
RE:34460 マスキング処理No.34498
matushiro97 さん 15/10/03 21:17
 
>これに描画の抑制とループして最終行までを加えると、以下のようになります。
>
>    setcompatiblemode 0x0F;
>    disabledraw;
>    while(1){
>        down 4;
>        beginsel;
>        down;
>        insert "****";
>        insertreturn;
>        
>        if(lineno==linecount2)break;
>    }

上のマクロでinsert "****";の部分を現在の文字の部分だけを*に置換するにはどの
ようにすればいいでしょうか?

宜しくお願いします。

[ ]
RE:34498 マスキング処理No.34499
山紫水明 さん 15/10/03 22:26
 
 matushiro97さん,

>上のマクロでinsert "****";の部分を現在の文字の部分だけを*に置換するには
>どのようにすればいいでしょうか?

次のようにしたらいかがでしょうか。

disabledraw;
gofiletop;
#i = 1;
while(1){
    movetolineno 1, #i * 5;
    selectline;
    replaceall ".", "\\*", regular, inselect;
    if(lineno == linecount2 ) break;
    #i = #i + 1;
}
endmacro;

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:34499 マスキング処理No.34500
matushiro97 さん 15/10/03 22:35
 
ありがとうございました。



[ ]
RE:34500 マスキング処理No.34501
matushiro97 さん 15/10/04 12:31
 
特定の文字列 例えば'abcd'を含む行すべてを文字数分だけ'*'に置き換えるにはど
のようになるでしょうか。

宜しくお願いします。

[ ]
RE:34501 マスキング処理No.34502
山紫水明 さん 15/10/04 16:36
 
 matushiro97さん,

>特定の文字列 例えば'abcd'を含む行すべてを文字数分だけ'*'に置き換えるに
>はどのようになるでしょうか。

以下のようにしたらどうでしょう。

setcompatiblemode 0x00000200;
disabledraw;
gofiletop;
while( 1 ) {
    searchdown2 "^.*abcd.*$", regular;
    if( result ) {
        replaceall ".", "\\*", regular, inselect;
    } else {
        break;
    }
}
endmacro;

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:34502 マスキング処理No.34503
matushiro97 さん 15/10/06 12:56
 
ありがとうございました.
うまくいきました.

[ ]