IniFileでのReadStringのDefaultがセットされな


たきくけ  2009-12-22 16:55:44  No: 36516  IP: 192.*.*.*

教えて下さい。

TinifileのReadstring関数を使用してDefaultの値を設定しているのですが、Defaultの値がセットされません。

例えば
Hoge.iniのファイルの中身
[Para]
Test1=
Test2=OK

となっているとします。

Ren2 := Inifile.Readstring('Para','Test2','NG');
と読み込んだとき、Ren2にはNGではなくOKが入ります。
こういったときは問題ありませんが、

Ren1 := Inifile.Readstring('Para','Test1','NG');
としたとき、Hoge.iniのTest1は''(空白)なのでDefaultのNGが入ってほしいです。
しかしこのNGがRen1にセットされずRen1→''となってしまいます。
Defaultの意味をはきちがえているのでしょうか?
何が問題か教えて下さい、よろしくお願いします。

編集 削除
小豚丸  2009-12-22 17:11:23  No: 36517  IP: 192.*.*.*

Default は以下の場合に返される文字列値です。
1.セクションが存在しない
2.キーが存在しない
3.キーにデータが代入されていない

3番に該当するはずですが、Delphiのバージョンはいくつでしょうか?

編集 削除
ぽむぽむ  2009-12-22 17:34:19  No: 36518  IP: 192.*.*.*

Delphi5〜7しかわからないけど、TInifile.Readstring は、単純に
GetPrivateProfileStringのAPIを使ってるだけ。
GetPrivateProfileStrinは、キーが存在しないときにDefaultを返すから、Helpの
「キーにデータが代入されていない」に矛盾する。
Helpの間違いじゃなかろうか。

編集 削除
tor  2009-12-22 17:39:23  No: 36519  IP: 192.*.*.*

Defaultが使われるのはキーが見つからない時ですね。
この場合だと「キーは存在して、空文字列が値として指定されている」ということになるから結果が空文字列になるのだと思います。
(そういう仕様でないと、実際に空文字列を値に指定したい場合に困りますよね)

それで困るのだったら、結果が空の場合にDefaultで置き換えるようなラッパ関数を作ってみてはどうでしょう。

編集 削除
たきくけ  2010-01-13 09:15:18  No: 36520  IP: 192.*.*.*

みなさん回答ありがとうございます。
結局  ""(空)  の状態であればデフォルトを入れるという関数を自分で作成しなきゃだめですかね。

逆にいうとデフォルトの値はいつ入るのですかね。
うまい具合に標準関数を使用できると楽なのですが…。

編集 削除
HOta  2010-01-13 10:15:16  No: 36521  IP: 192.*.*.*

エディターなどでキーを消せばDefaultを返しますよ。

編集 削除
Kenny  2010-01-13 11:38:22  No: 36522  IP: 192.*.*.*

iniファイルをsaveするときに、保存したいパラメーターを保存するのが本来の使いかですから、
面倒がらずにデフォルト値を保存すれば良いのでは。
それに、一度デフォルト値以外を保存したキーであれば、デフォルト値を入れるためにわざわざ
クリアすることになりますから、手間は同じでしょう。
デフォルト値以外は絶対に入らない、というのであれば、定数で良い訳だし。
DeleteKey、という手はありますけどね。

編集 削除