更改 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。因此,将其设置为 '|',代码的行为将如您所愿。

忍不住觉得字典更适合你的需要