【问题标题】:Inno Setup create TStringList from CDATAInno Setup 从 CDATA 创建 TStringList
【发布时间】:2014-02-28 11:26:26
【问题描述】:

我在 CDATA 元素中有一个列表。如何从 CDATA 中获取元素并将其添加到 TStringList?

如果我得到 CDATA 字符串,它会返回:

'string'#10#9#9#9'string'#10#9#9#9'string'#10#9#9#9'string'...

但是字符#10#9#9#9 不是字符串;我不能使用 StringChangeEx 方法来替换这些字符。

谢谢

【问题讨论】:

  • 解决了。我正在使用 StringChangeEx(),我替换了“#10”,这不是一个字符串。抱歉,感谢您的宝贵时间。

标签: string inno-setup cdata tstringlist


【解决方案1】:

您得到的字符串是包含不可打印字符的字符串的有效表示法。但是您不必担心在使用字符串列表或StringChangeEx 函数时会丢失任何字符。让我用这个简短的脚本说服你:

[Code]
const
  PrintableString = 'string-string-string-string';
  NonPrintableString = 'string'#10#9#9#9'string'#10#9#9#9'string'#10#9#9#9'string';

procedure InitializeWizard;
var
  S: string;
  StringList: TstringList;
begin
  StringList := TstringList.Create;
  try
    StringList.Add(NonPrintableString);
    S := StringList[0];

    if S = NonPrintableString then
      MsgBox('String list didn''t lose non printable chars!', mbInformation, MB_OK);

    StringChangeEx(S, #10#9#9#9, '-', True);

    if S = PrintableString then
      MsgBox('String has been modified as expected!', mbInformation, MB_OK);
  finally
    StringList.Free;
  end;
end;

但是,我认为提出您的问题只是因为您想将这些数据呈现给用户,而对于不可打印的字符,这有时可能会很困难。一个例子。如果您有一个中间包含空终止符的字符串,并且您希望向用户显示这样的字符串,例如在消息框中,您将只显示该终止符之前的字符串部分。但是,这不是你可以影响的。这就是后面的 Windows API 函数调用处理字符串的方式:

[Code]
procedure InitializeWizard;
var
  S: string;
begin
  S := 'Hello'#0' world!';
  MsgBox(S, mbInformation, MB_OK);
end;

如您所见,对于上述情况,需要用一些可打印的字符替换空终止符字符,例如空间。

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 2015-12-21
    • 2016-01-07
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2015-11-22
    相关资源
    最近更新 更多