|
YKさん、こんにちは。 どみにかと申します。
遅レスですけども。
しかも1回、間違い投稿しました。みなさんごめんなさい。m(_ _)m
本題ですが、下記のマクロで処理時間も含めて機能的に問題がなければ、テキトーに
改良してご使用ください。
かなり無駄な処理してますけども、検索からR/Wまで全てマクロでやるよりはマシだ
と思います。
今ご使用のマクロの改造時間も含めて。
注1) ざーっと作りました。バグがあったらすいません。
注2) INIファイルは、「ファイル名+連番+拡張子」となります。
注3) 田楽DLLを使用してます。
//-----------------------------
Main:
call StartInit; // 開始処理
call WriteIniNum "TestSec1", "TestKey1", 1; // 数値書込み
call WriteIniStr "TestSec2", "TestKey2", "Test"; // 文字列書込み
call GetIniNum "TestSec1", "TestKey1"; // 数値読込み
message str(##return); // 結果表示
call GetIniStr "TestSec2", "TestKey2"; // 文字列読込み
message $$return; // 結果表示
call EndMacro; // 終了処理
endmacro;
StartInit:
$ININAME = windir + "\\Test"; // INIファイル名
$INITYPE = ".ini"; // INIファイル拡張子文字列(何でもいい)
#INISIZE = 60000; // 書込制限サイズ(少なめにしとく)
if(#INISIZE > 0) {
loaddll "DengakuDLL.dll"; // 田楽DLLのロード
if(!result) { message "田楽DLLが見つかりません。"; call EndMacro; }
}
return;
EndMacro:
if(loaddllfile != "") freedll; // DLLの解放
endmacro; // マクロ終了
//-----------------------------
WriteIniNum:
call WriteIniStr $$1, $$2, str(##3);
return ##return;
WriteIniStr:
if(#INISIZE <= 0) {
// 制限なしの場合はそのまま処理して終了
writeinistr $ININAME + $INITYPE, $$1, $$2, $$3;
##Rtn = result;
}else{
// すでにある場合は必ず削除する必要がある・・・と思う。
##FNo = 1;
while(true){
$$FName = $ININAME + str(##FNo) + $INITYPE;
// 存在しない場合はループを抜ける
if (!(existfile($$FName))) { break; }
writeinistr $$FName, $$1, $$2, 0;
##FNo = ##FNo + 1;
}
##FNo = 1;
while(true){
$$FName = $ININAME + str(##FNo) + $INITYPE;
// ファイルサイズ取得(ファイルがなければ""が返る)
$$DllRtn = dllfuncstr("SIZEOF", "'" + $$FName + "'");
if ($$DllRtn == "") {
// 存在しない場合は作ってしまう(ついでに書き込む)
$$Value = "[" + $$1 + "]\n" + $$2 + "=" + $$3 + "\n";
call CreateIni $$FName, $$Value;
##Rtn = ##return; break;
}
// 書き込み可能なサイズの場合のみ処理する
if (val($$DllRtn) < #INISIZE) {
writeinistr $$FName, $$1, $$2, $$3;
##Rtn = result; break;
}
##FNo = ##FNo + 1;
}
}
return ##Rtn;
//-----------------------------
GetIniNum:
call GetIniStr $$1, $$2;
return val($$return);
GetIniStr:
if(#INISIZE <= 0) {
// 制限なしの場合はそのまま処理して終了
$$Rtn = getinistr($ININAME + $INITYPE, $$1, $$2);
}else{
##FNo = 1;
while(true){
$$FName = $ININAME + str(##FNo) + $INITYPE;
// 存在しない場合は""を返す
if (!(existfile($$FName))) { $$Rtn = ""; break; }
// INIファイルから値を取得
$$Rtn = getinistr($$FName, $$1, $$2);
// 取得できている場合は処理を抜ける
if ($$Rtn != "") { break; }
##FNo = ##FNo + 1;
}
}
return $$Rtn;
//-----------------------------
CreateIni:
##hWnd = hidemaruhandle(0); // ハンドル退避
openfile "/h"; // 新規作成
if($$2 != "") { insert $$2; } // 書きこむ
saveas $$1; // 名前をつけて保存
setactivehidemaru ##hWnd; // マクロ制御を戻す
closehidemaru findhidemaru($$1); // 閉じる
return result;
//-----------------------------
|
|