加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 读取Inifile到Stringlist问题空间的问题

发布时间:2020-12-15 09:37:46 所属栏目:大数据 来源:网络整理
导读:我使用inifile存储值,我用它来替换文件中的其他值,例如A,BA = B,但是如果我在值B之前有一个空格,那么当读取EG A = B时仍然读取在’B’而不是’B’,有没有人知道如何解决这个问题,我使用的是Delphi 7,所以我不能使用StrictDelimiter选项. procedure ReadIntoV
我使用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;

谢谢

科林

解决方法

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读取它们后自己去掉它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读