更改 TStrings.Delimiter 会中断按名称搜索
Changing TStrings.Delimiter breaks search by name
以下代码有效:
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
确定名称和值之间分隔符的属性是NameValueSeparator
。因此,将其设置为 '|'
,代码的行为将如您所愿。
忍不住觉得字典更适合你的需要
以下代码有效:
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
确定名称和值之间分隔符的属性是NameValueSeparator
。因此,将其设置为 '|'
,代码的行为将如您所愿。
忍不住觉得字典更适合你的需要