◀マクロトップへ
  • 57 英語数計算PPAマクロ
    • 138 Re:英語数計算PPAマクロ
      • 148 Re2:英語数計算PPAマクロ
        • 149 WCのJScript版ですが
          • 193 Re:WCのJScript版ですが
            • 194 Re2: WCのJScript版ですが
              • 195 Re3: 御礼
  • [57] 英語数計算PPAマクロ 豹悟郎 2004年01月11日 15:46

    // ワード数計算マクロ(EWCount.ppa)--スペース+ダッシュVer
    // 2004.1.7 堀内悟(豹悟郎)作成
    // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに
    // PPA.DLL を入れておいてください。
    // また、マクロファイルの拡張子は .PPA でなくてはなりません

    var
    WordC,DC: Integer; //ワード数, ダッシュ数
    p,d : Integer; //(空白, ダッシュ)の文字列内位置
    StrLen : Integer; //選択文字列長
    Str,tmpStr : String; //選択文字列, 調査中現行文字列
    SPC,DSH : String; //シングルスペース, ダッシュ

    //処理の流れ
    //文字列内の空白の位置を調べる、空白があればワード数を1増
    //文字列先頭からその位置までを削除→tmpStrに格納
    //tmpStrをTrim+Deleteで加工、先頭に戻る
    //空白なし→ループ終了
    //ダッシュ'--'についても同様のループ
    //最後にダッシュの分を語数に足す

    begin
    Str := Trim(S_GetSelectedString(0));
    StrLen := Length(Str);
    WordC := 0;
    SPC := ' ';
    DSH := '--'; //em dash
    tmpStr := Str;

    if StrLen = 0 then
    begin
    MessageBox('文字が選択されていません。', 'エラー',0);
    Exit;
    end;

    p := Pos(SPC, tmpStr);

    while (p <> 0) do
    begin
    p := Pos(SPC, tmpStr); //空白の位置を調べる
    if p = 0 then Break;
    WordC := WordC + 1;
    tmpStr := Trim(Delete(tmpStr, 1, p)); //先頭から空白まで削除
    end;

    //ダッシュ数計算
    tmpStr := Str; //検査対象文字列を復元
    d := Pos(DSH, tmpStr);

    while (d <> 0) do
    begin
    d := Pos(DSH, tmpStr); //ダッシュの位置を調べる
    if d = 0 then Break;
    DC := DC + 1;
    tmpStr := Trim(Delete(tmpStr, 1, d+1)); //先頭からダッシュまで削除
    end;

    //語数集計
    WordC := WordC+1+DC;
    MessageBox(IntToStr(WordC) + '語です。', '計算結果',0);
    end

    //注 後続語がないダッシュ(例: 会話文末の「--"」)も1語とみなす
    //語間スペースと--を数えるだけなので英語以外でも使えると思います
    • [138] Re:英語数計算PPAマクロ ki 2005年02月05日 14:50

      ▼ 豹悟郎さん
      > // ワード数計算マクロ(EWCount.ppa)

      英単語数の計算マクロと思いこれはありがたいということで早速利用させていただいたのですが、質問があります。
      以下の英文の単語数をEWCount.ppaで計算しますと10語となります。しかし、実際は12語なのです。原因はおわかりでしょうか?
      うまく計算できますと大変便利なマクロなのですが。うまい対処方法はないでしょうか?
      Hello, everyone.
      My name is Tom Brown.
      I'm staying with Ken's family.
      • [148] Re2:英語数計算PPAマクロ 豹悟郎 2005年06月15日 00:43

         改行する前にスペースが入っていると12語と数えるようです。改行を丁寧に扱う必要があるようです。
         現在諸事情により直せませんのでどなたかの御好意に期待するしかありません。

        ▼ kiさん
        > ▼ 豹悟郎さん
        > > // ワード数計算マクロ(EWCount.ppa)
        >
        > 英単語数の計算マクロと思いこれはありがたいということで早速利用させていただいたのですが、質問があります。
        > 以下の英文の単語数をEWCount.ppaで計算しますと10語となります。しかし、実際は12語なのです。原因はおわかりでしょうか?
        > うまく計算できますと大変便利なマクロなのですが。うまい対処方法はないでしょうか?
        > Hello, everyone.
        > My name is Tom Brown.
        > I'm staying with Ken's family.
        • [149] WCのJScript版ですが りーや 2005年06月16日 08:49

          アプローチ違ってUNIXに古くからある WC コマンドをJScript に移植したのを拾ってきて、サクラエディタのマクロにしたものがあります。WC コマンドと同じ結果は得られるようで、行数・単語数・文字数を表示します。
          あまり古くないIEがあれば特に必要なものはなく、切り取り線の内側テキストファイルとしてマクロの置き場所収めれば普通に使えると思います。

          -----^ wc.js ( date:05-06-16 time:08:47 ) ----< cut hear
          // WC JScript
          var WshShell = new ActiveXObject("WScript.Shell");
          var nl = 0, nw = 0, nc = 0;
          // line, word and character counters

          var selStr = Editor.GetSelectedString(0);
          if(selStr.length > 0) {
          nc = selStr.length;
          var words = selStr.split(/\s+/);
          nw = words.length;
          var lines = selStr.split(/\n/);
          nl = lines.length;
          }

          var outStr = "lines:" + nl.toString();
          outStr += " words:" + nw.toString();
          outStr += " chars:" + nc.toString();

          WshShell.Popup(outStr, 0 , "Word Count", 0);
          -----$ wc.js ( line:19 charset:ascii) --------< cut hear
          • [193] Re:WCのJScript版ですが ki 2005年07月24日 14:05

            ▼ りーやさん
            > アプローチ違ってUNIXに古くからある WC コマンドをJScript に移植したのを拾ってきて、サクラエディタのマクロにしたものがあります。WC コマンドと同じ結果は得られるようで、行数・単語数・文字数を表示します。
            > あまり古くないIEがあれば特に必要なものはなく、切り取り線の内側テキストファイルとしてマクロの置き場所収めれば普通に使えると思います。
            >
            > -----^ wc.js ( date:05-06-16 time:08:47 ) ----< cut hear
            > // WC JScript
            > var WshShell = new ActiveXObject("WScript.Shell");
            > var nl = 0, nw = 0, nc = 0;
            > // line, word and character counters
            >
            > var selStr = Editor.GetSelectedString(0);
            > if(selStr.length > 0) {
            > nc = selStr.length;
            > var words = selStr.split(/\s+/);
            > nw = words.length;
            > var lines = selStr.split(/\n/);
            > nl = lines.length;
            > }
            >
            > var outStr = "lines:" + nl.toString();
            > outStr += " words:" + nw.toString();
            > outStr += " chars:" + nc.toString();
            >
            > WshShell.Popup(outStr, 0 , "Word Count", 0);
            > -----$ wc.js ( line:19 charset:ascii) --------< cut hear
            ありがとうございました。早速ためさせていただきました。以下のようなエラーが出てしまいましたがお分かりでしょうか?
            Macro読み込みエラー
            Line 2: var WshShell = new ActiveXObjectは存在しない関数です。
            • [194] Re2: WCのJScript版ですが りーや 2005年07月25日 23:52

              ▼ kiさん
              >ありがとうございました。早速ためさせていただきました。

              えっと、ひと月以上前のモノ、早速といわれても・・・
              しかも、その間に選択するたげで、 行数とバイト数がステータスバーに表示される というサクラエディタの 素敵なバージョンアップがあって、 七割方はもう無用の長物マクロだし (^^)V

              >Macro読み込みエラー
              >Line 2: var WshShell = new ActiveXObjectは存在しない関数です。

              このエラーメッセージは、 マクロファイルがJScriptのWSHマクロ として認識されてないような気がします。
              1.ファイルの拡張子が、.js のファイルとして保存していますか?
                (ウチでは試しようがないのですが .ppa とかにしてるとそういうメッセージ になるのかも知れません。)
              2.サクラエディタや Script エンジンの元になるIE は、最新のものを使ってますか?
              上記の2点を順に確認してもらえば、 多分エラーは無くなると思います。


              ついでに、
              var IEobj = new ActiveXObject("InternetExplorer.Application");
              IEobj.Navigate("about:blank");
              IEobj.Document.parentWindow.clipboardData.setData("Text" , outStr);
              の3行をマクロの最後に追加すると、 ポップアップの内容を、 クリップボードにもコピーするので、任意のところに「貼り付け(Cntl+V)」出来るようになります。
              • [195] Re3: 御礼 ki 2005年08月06日 14:21

                りーやさん
                すべてご指摘の通りです。ありがとうございました。英文ワープロとして使う人にもword数がわかり便利になりました。御礼。