【发布时间】:2015-02-10 16:06:00
【问题描述】:
以下代码有效:
var
SL: TStrings;
begin
SL := TStringList.Create;
try
SL.Add(Format('%s=%s', ['Alex', '14.05.1984']));
ShowMessage(SL.Values['Alex']);
finally
SL.Free;
end;
end;
虽然此代码不起作用(无法从名称中获取值):
var
SL: TStrings;
begin
SL := TStringList.Create;
try
SL.Delimiter := '|'; // <=== changed from default '=' char
SL.QuoteChar := '"'; // <=== added
SL.StrictDelimiter := True; // <=== added
SL.Add(Format('%s=%s', ['Alex', '14.05.1984']));
ShowMessage(SL.Values['Alex']); // <=== returns an empty string
finally
SL.Free;
end;
end;
有人可以帮我吗?
已编辑
program Sample;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes,
Dialogs;
var
SL: TStrings;
begin
try
SL := TStringList.Create;
try
SL.Delimiter := '|';
SL.QuoteChar := '"';
SL.StrictDelimiter := True;
// SL.Add(Format('%s=%s', ['Alex', '14.05.1984']));
SL.LoadFromFile('ReplacementPairs.txt');
ShowMessage(SL.Values['Alex']);
finally
SL.Free;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
ReplacementPairs.txt 文件的内容是:
Alex|14.05.1984
Paul|10.07.2015
Edith|18.11.1961
【问题讨论】:
-
你为什么不用字典?
-
因此更改分隔符会中断按名称搜索,即使 TStrings 实例内部知道新分隔符。
-
与其自己添加名称-值对,为什么不写:
SL.Values['Alex'] := '14.05.1984'? -
我真的很想知道你说什么。因为在 Delphi 6 中,
StrictDelimiter不存在,但是当我删除它时,代码不会返回空字符串。在 XE3 中,我无法重现您报告的内容。 -
您的代码不会产生您报告的行为。我建议你尝试运行它。如果您在控制台应用程序中制作了一个完整的程序,您只需复制/粘贴一个演示该行为的程序即可。就目前而言,这个问题没有任何意义,因为您报告的行为无法重现。
标签: delphi delphi-xe3