|
h-tom です。
ADODB.Stream を使えば一時ファイルを作らなくてもすみますが、
改行コードの扱いが元のファイルと一致しないかもしれない。
Ver.8.94以降だと補正もできそうです。
//-------------------------- ここから
if( !selecting ) {
// message "範囲選択して実行してください。";
endmacro;
}
$select = gettext2(seltopcolumn, seltoplineno, selendcolumn, selendlineno, 1);
call ADOST_GetByteSize "UTF-8", $select;
#ret = ##return;
if(#ret > -1){
// message "バイト数(UTF-8):" + str(#ret);
title str(#ret),1;
title -1,1;
}else {
title "",1;
title -1,1;
}
endmacro;
/*
' 関数名 : ADOST_GetByteSize
' 返り値 : バイト数
' 引き数 : cset : 入力文字データのキャラクタセット名
指定可能なのは、HKEY_CLASSES_ROOT\MIME\Database\Charse
t を参照
' : InStr : 入力データ
' 機能説明 : 入力文字データを変換し、バイト数を取得する
' 備考 : https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/stream-object-ado?view=sql-server-ver15
*/
ADOST_GetByteSize:
//ADODB.Streamで使う定数の代わりの変数
##TextStream = 2;
##BinStream = 1;
##adReadAll = -1;
##SaveCreateNotExist = 1;
##adSaveCreateOverWrite = 2;
$$encodeStr = $$1;
$$SourceText = $$2;
//テキストがない場合は0を返す。
if(strlen($$SourceText) == 0) return 0;
//エンコード指定がない場合はエラー
if(strlen($$encodeStr) == 0) return -1;
//各種変換入力用オブジェクト生成
##Stm_in = createobject("ADODB.Stream");
//失敗した場合はエラー
if(##Stm_in == 0) return -1;
//オープン
callmethod ##Stm_in, "Open";
//データタイプを設定
setpropnum ##Stm_in, "Type", ##TextStream;
//文字セットを指定
setpropstr ##Stm_in, "Charset", $$encodeStr;
//テキストを書き込み
callmethod ##Stm_in, "WriteText", $$SourceText;
//バイト数取得
##size = getpropnum(##Stm_in, "Size");
//Charsetが"UTF-8"の場合、BOMが必ず追加される為、BOM分だけ補正する
if(toupper($$encodeStr) == "UTF-8") ##size = ##size - 3;
//オブジェクト解放
releaseobject ##Stm_in;
//テキストがあって、##sizeが0の場合は、COM関連でエラーが出ているのでエ
ラーを返す。
if(##size == 0) return -1;
return ##size;
//-------------------------- ここまで
|
|