Delphi Tips 
-----------------------------

0034  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
TIniFileにクオートを含む文字列を与えるときの注意点

APIのGetPrivateProfileStringの仕様として、値文字列の両端がクォート( " or ' )で囲まれていると、これを外してから返すことになっています。
これは、次のような問題を引き起こしかねません。

[Iniファイルの内容]
SomeItem="a bd","de fg","h ijk"

これをTIniFileを使って読み出すと、結果は、

Result='a bd","de fg","h ijk';

となって、両端のクォートだけが取り払われ、おかしなことになってしまいます。
これは、特に、TStringList.CommaTextをTInifileを使って読み書きするときに注意すべき点です。

これを防ぐには、クォートで括られた文字列群をさらに一段、クォートで囲ってしまいます。

[Iniファイルの内容]
SomeItem=""a bd","de fg","h ijk""

これをTIniFileを使って読み出すと、結果は、

Result='"a bd","de fg","h ijk"';

となって、OKです。

コード的には、

    IniFile.WriteString('TEST', 'ZZZ', TmpLst.CommaText);

    IniFile.WriteString('TEST', 'ZZZ', '"'+TmpLst.CommaText+'"');

とします。

ちなみに、TRegIniFileを使う場合には、このようなことは起こりません。
参照: [Delphi-ML:8412] [Delphi-ML:8417] <アプリケーション> <バグ>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp