// 範囲選択中の文字数を表示する // TAB=4 // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。 // マクロファイルの拡張子は .PPA でなくてはなりません。 // エディタウィンドウにて選択中の文字列の // ・文字サイズ(バイト数) // ・文字数(半角文字・全角文字をそれぞれ1文字ずつとしてカウントした値) // ・改行数 // をダイアログに表示します。 var CRLF,CR,LF:String; // 文字列変数を用意 str:String; // 文字列変数を用意 byte:Integer; // 整数数値変数を用意 mess:String; // 文字列変数を用意 ダイアログに表示する文字列 num:Integer; // 文字数をカウントする 整数数値変数を用意 han,zen:Integer; // 全角文字の文字数 n_crlf,n_cr,n_lf:Integer; // 各改行コードの数 nl:Integer; // 改行コードの総数 pt:Integer; // 調査時のポインタ(もどき)の 整数数値変数を用意 tmp1,tmp2:String; // 調査時の作業用の 文字列変数を用意 isknj:Integer; // 漢字かどうかのフラグの 整数数値変数を用意 begin // 文字列変数 CRLF に改行を格納する CRLF := ' '; CR := Copy(CRLF,1,1); LF := Copy(CRLF,2,1); str := S_GetSelectedString(0); // 選択部分の文字列を str に格納する。 byte := Length(str); // 文字列のサイズ(バイト数)を整数数値変数 byte に格納する。 // 文字数を数える。 num := 0; // 全文字数 = 0; zen := 0; // 全角文字数 = 0; han := 0; // 半角文字数 = 0; n_crlf := 0; // CRLF改行の数 = 0; n_cr := 0; // CR 改行の数 = 0; n_lf := 0; // LF 改行の数 = 0; pt := 1; // 調査用のポインタ(もどき) while ( pt <= byte ) do begin tmp1 := Copy(str,pt,1); // ポインタ(もどき)位置から1バイト取得し、tmp2 に格納する tmp2 := Copy(str,pt,2); // ポインタ(もどき)位置から2バイト取得し、tmp2 に格納する isknj := 0; // 「2バイト文字ではない」にしておく。 if ( (' ' <= tmp2) and (tmp2 <= '滌') ) then isknj := 1; // 2バイト文字である if ( ('漾' <= tmp2) and (tmp2 <= 'K') ) then isknj := 1; // 2バイト文字である if (isknj <> 0) then // 2バイト文字の場合 begin zen := zen + 1; // 全角文字数 ++; pt := pt + 1; // ポインタ(もどき)を 1 余計に進める。 end else // 2バイト文字ではない場合 begin if (tmp2 = CRLF) then begin n_crlf := n_crlf + 1; // CRLF改行の数 ++; pt := pt + 1; // ポインタ(もどき)を 1 余計に進める。 end else if (tmp1 = CR ) then n_cr := n_cr + 1 // CR改行の数 ++; else if (tmp1 = LF ) then n_lf := n_lf + 1 // LF改行の数 ++; else han := han + 1 // 半角文字数 ++; ; end ; // num := num + 1; // 文字数 ++; pt := pt + 1; // ポインタ(もどき) ++; end; num := zen + han; // 文字数の総数(全角文字の数 + 半角文字の数) nl := n_crlf + n_cr + n_lf; // 改行の総数(CRLF改行の数 + CR改行の数 + LF改行の数) // ダイアログに出力(表示)する文字列を生成する。 mess := ''; mess := mess + '・サイズ:' + IntToStr(byte) + ' バイト' + CRLF; mess := mess + CRLF; mess := mess + '・文字数:' + IntToStr(num) + ' 文字 (' + IntToStr(han + zen * 2 ) + 'バイト)' + CRLF; mess := mess + ' ├ 半角文字数:' + IntToStr(han) + ' 文字 (' + IntToStr(han ) + 'バイト)' + CRLF; mess := mess + ' └ 全角文字数:' + IntToStr(zen) + ' 文字 (' + IntToStr(zen * 2 ) + 'バイト)' + CRLF; mess := mess + CRLF; mess := mess + '・改行数:' + IntToStr(nl) + ' 個 (' + IntToStr(n_crlf * 2 + n_cr + n_lf) + 'バイト)' + CRLF; mess := mess + ' ├ CRLF:' + IntToStr(n_crlf) + ' 個 (' + IntToStr(n_crlf * 2 ) + 'バイト)' + CRLF; mess := mess + ' ├ CR :' + IntToStr(n_cr ) + ' 個 (' + IntToStr(n_cr ) + 'バイト)' + CRLF; mess := mess + ' └ LF :' + IntToStr(n_lf ) + ' 個 (' + IntToStr(n_lf ) + 'バイト)' + CRLF; MessageBox(mess,'選択中の文字列',0); // ダイアログを表示する end;