Следующий код работает:Изменение TStrings.Delimiter разбивает поиск по имени
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;
Может кто-нибудь мне помочь?
Edited
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''? –