教えて下さい。
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の意味をはきちがえているのでしょうか?
何が問題か教えて下さい、よろしくお願いします。
Default は以下の場合に返される文字列値です。
1.セクションが存在しない
2.キーが存在しない
3.キーにデータが代入されていない
3番に該当するはずですが、Delphiのバージョンはいくつでしょうか?
Delphi5〜7しかわからないけど、TInifile.Readstring は、単純に
GetPrivateProfileStringのAPIを使ってるだけ。
GetPrivateProfileStrinは、キーが存在しないときにDefaultを返すから、Helpの
「キーにデータが代入されていない」に矛盾する。
Helpの間違いじゃなかろうか。
Defaultが使われるのはキーが見つからない時ですね。
この場合だと「キーは存在して、空文字列が値として指定されている」ということになるから結果が空文字列になるのだと思います。
(そういう仕様でないと、実際に空文字列を値に指定したい場合に困りますよね)
それで困るのだったら、結果が空の場合にDefaultで置き換えるようなラッパ関数を作ってみてはどうでしょう。
みなさん回答ありがとうございます。
結局 ""(空) の状態であればデフォルトを入れるという関数を自分で作成しなきゃだめですかね。
逆にいうとデフォルトの値はいつ入るのですかね。
うまい具合に標準関数を使用できると楽なのですが…。
エディターなどでキーを消せばDefaultを返しますよ。
iniファイルをsaveするときに、保存したいパラメーターを保存するのが本来の使いかですから、
面倒がらずにデフォルト値を保存すれば良いのでは。
それに、一度デフォルト値以外を保存したキーであれば、デフォルト値を入れるためにわざわざ
クリアすることになりますから、手間は同じでしょう。
デフォルト値以外は絶対に入らない、というのであれば、定数で良い訳だし。
DeleteKey、という手はありますけどね。
ツイート | ![]() |