|
writeinistr/writeinistrwは、1つの呼び出しにつき毎回ファイル名、セクション名、
キー名を指定するので、少ないデータなら問題ないですですが、大量のデータを高速
にする目的には合わないかもしれないです。
別の方法で、iniファイル形式に準じたファイルとして書き出したほうがよさそうです。
iniファイル形式は、日本語環境ならShift-JISか、Unicode(UTF-16)(BOMあり)のどち
らかになります。
UTF-8はできないはずです。
(読み込み側も自前で処理するとしたらUTF-8でも不可能ではないですが)
簡単には、秀丸エディタで10万行のファイルを開いて、INIファイルに合う形に加工
して、saveasするのがいいです。
置換で加工する場合は、replaceallquickが速いです。
従来のマクロに慣れていればそっちのほうがいいかもしれないですが、V9.19以降で
はJavaScriptが使えるようになりました。
高速目的の場合、JavaScriptのほうがいい場合があります。
COMオブジェクトも秀丸マクロの文法に書き直すことなくそのまま扱え、高速かつ簡
単にできるようになると思います。
例えば、マクロが以下のようなものだとします。
$file="C:\\Folder\\test.ini";
#adodb=createobject("ADODB.Stream");
setpropstr #adodb, "Charset", "UTF-16";//, "UTF-8";
member #adodb, "Open";
member #adodb, "WriteText", "[AAA]\r\nabc=def\r\n[XXX]\r\nxyz=123\r\n", 0;
member #adodb, "SaveToFile", $file, 2;
member #adodb, "Close";
message getinistrw($file,"AAA","abc");
endmacro;
JavaScriptだと、以下のようになります。
(・・・というか、たぶんJavaScriptのほうが元で、今まで秀丸マクロの文法に書き
直していたものを、元に戻すことになる)
$file="C:\\Folder\\test.ini";
js{
file=hidemaru.getVar("$file");
adodb=createobject("ADODB.Stream");
adodb.Charset ="UTF-16";//"UTF-8";
adodb.Open();
adodb.WriteText( "[AAA]\r\nabc=def\r\n[XXX]\r\nxyz=123\r\n", 0 );
adodb.SaveToFile( file, 2 );
adodb.Close();
}
message getinistrw($file,"XXX","xyz");
endmacro;
10万行の解析というのがどのようなものかわからないですが、読み込み側もJavaScri
ptにすると高速になるかもしれません。
読み込みは、hidemaru.loadTextFileを使うと形式を意識せずに簡単に変数上に読み
込めます。(ただし10MBまで)
js{
utf8contents=hidemaru.loadTextFile("C:\\Folder\\utf8file.txt");
a=utf8contents.split("\r\n");
message(a[0]);
message(a[1]);
message(a[2]);
}
hidemaru.saveTextFileというメソッドは無いので、あったほうがよさそうです。今
後検討します。
UTF-16ならFileSystemObjectでもできると思います。
|
|