◀マクロトップへ
  • 229 Count.ppaをjsで書き換えてみました
  • [229] Count.ppaをjsで書き換えてみました ひよこ枕 2006年01月08日 21:21

    はじめまして。
    最近マクロに手を出し始めました。

    私の環境のせいなのかどうかは分かりませんが、数の多い文字数をCount.ppaでカウントしようとすると時間がかかってしまいます。
    (例えばCount.ppaを開いて全選択して実行すると、10秒くらいCPU全開になります)
    そこで、JScriptで書き直してみたら速くなったので、そのソースを投稿してみます。

    /***** ここからソース *****/
    var CR = 0xd;
    var LF = 0xa;

    var oShell = new ActiveXObject("WScript.Shell");
    var str,msg;
    var c,prec=0;
    var i;
    var iSize = 0;
    var i1Byte = 0;
    var i2Byte = 0;
    var iCRLF = 0;
    var iCR = 0;
    var iLF = 0;

    str = Editor.GetSelectedString(0);
    //選択文字のサイズ(半角1、全角2でカウント)、半角文字数、全角文字数、改行数をカウント
    for(i = 0; i < str.length; ++i) {
    c = str.charCodeAt(i);
    //半角文字にあたるコードの場合、1バイトとしてカウント。
    if ( (c >= 0x0 && c <= 0x7d) || (c == 0xf8f0) || (c >= 0xff61 && c <= 0xff9f) || (c >= 0xf8f1 && c < 0xf8f4)) {
    //1Byte文字
    iSize += 1;
    //改行コード解析
    if (c == CR) {
    iCR += 1;
    } else if (c == LF) {
    //前の文字がCRだったら
    if (prec == CR) {
    iCR -= 1; //CR数を戻して
    iCRLF += 1; //CRLF数をインクリメント
    } else {
    iLF += 1;
    }
    } else {
    i1Byte += 1;
    }
    } else {
    //2Byte文字
    iSize += 2;
    i2Byte += 1;
    }
    prec = c;//CRLF検査用に保存
    //oShell.Popup("第" + i + "文字:" + c , 0 , "マクロ実行の確認",1);
    }

    //出力文字列作成
    msg = "";
    msg += "サイズ :" + iSize + "バイト\n";
    msg += "半角文字:" + i1Byte + "文字\n" ;
    msg += "全角文字:" + i2Byte + "文字\n" ;
    //改行数は0の場合出さないようにしておく
    if (iCR > 0) msg += "CR改行 :" + iCR + "文字\n" ;
    if (iLF > 0) msg += "LF改行 :" + iLF + "文字\n" ;
    if (iCRLF > 0) msg += "CRLF改行:" + iCRLF + "文字" ;
    oShell.Popup(msg,0,"文字数カウント結果",0);

    /***** ここまでソース *****/

    ロジックはだいたい同じにしたつもりなんですけど、どこで速度に違いが出てるんでしょう?