我使用inifile存储值,我用它来替换文件中的其他值,例如A,BA = B,但是如果我在值B之前有一个空格,那么当读取EG A = B时仍然读取因为只是'B'而不是'B',有没有人知道如何解决这个问题,我使用的是Delphi 7,所以我不能使用StrictDelimiter选项.
procedure ReadIntoVList(const aSection:string;AValueList:TValueListEditor);
var
IniFile:TIniFile;
SL: TStringList;
i: Integer;
begin
SL := TStringList.Create;
IniFile := TIniFile.Create(ChangeFileExt(Application.Exename, '.ini'));
try
IniFile.ReadSectionValues(ASection, SL);
AvalueList.Strings.AddStrings(SL);
finally
StampIniFile.Free;
SL.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
谢谢
科林
TIniFile.ReadSectionValues最终使用Windows API函数GetPrivateProfileString从ini文件中读取键值.GetPrivateProfileString将删除任何前导和尾随空格以及字符串周围的任何引号.
这意味着该行
[ key = value1 value2 value3 ]
将返回与该行相同的值
[ key=value1 value2 value3 ]
(添加方括号以显示额外的空格).
为了保留任何前导和尾随空格,在将字符串写回ini时,必须将字符串用单引号或双引号括起来.
由于GetPrivateProfileString删除任何周围的引号(单引号或双引号),因此在从ini文件中读取值时不需要删除它们.
要添加引号,您不应该使用函数AnsiQuotedStr函数,如Francois所提到的(编辑,除非您特别注意选择一个非常不可能在字符串中的引号char).AnsiQuotedStr将添加周围的双引号,但它也会使字符串中已有的双引号加倍.虽然当您随后使用AnsiDequoteStr时这是期望的行为,但是当您使用TIniFile读取值时,GetPrivateProfileString将删除周围的quoatation标记,但它不会对嵌入的标记进行去加倍.
因此,如果您要使用TIniFile从文件读取值并希望保留前导和尾随空格,则必须自己添加周围的引号并确保任何嵌入的引号不会加倍(或者您必须用TIniFile读取它们后自己去掉它们.
归档时间: |
|
查看次数: |
4370 次 |
最近记录: |