-1

我想要一个带有字符串列表的文本文件(例如,逗号与可用于自动替换的键和值分隔)并将每个键值对存储在TDictionary<string, string>. 如何填充字典?

4

2 回答 2

4

从您的评论看来,您似乎想知道如何将一些以逗号分隔的键值对提取到字典中。这是一个基本示例:

procedure PopulateKeyValueDict(Strings: TStrings;
  Dict: TDictionary<string, string>);
var
  CommaPos: Integer;
  Line: string;
  Key, Value: string;
begin
  for Line in Strings do
  begin
    CommaPos := Pos(',', Line);
    if CommaPos=0 then
      raise Exception.CreateFmt(
        'Could find comma separated key/value pair in ''%s''',
        [Line]
      );
    Key := Copy(Line, 1, CommaPos-1);
    Value := Copy(Line, CommaPos+1, MaxInt);
    Dict.Add(Key, Value);
  end;
end;

您可能想要添加更多错误检查等,但我假设您已经知道如何做到这一点。此示例说明在第一个逗号上拆分一行,以及如何填充字典。

为了使用它,您需要将文件传输到TStrings对象。这是例行公事:

var
  Strings: TStringList;
....
Strings := TStringList.Create;
try
  Strings.LoadFromFile(FileName);
  PopulateKeyValueDict(Strings, Dict);
finally
  Strings.Free;
end;
于 2012-12-21T09:00:52.287 回答
1

如果你只有一对一的键值关系(不像三个关键词“apple”和“apples”,“McIntoshes”会变成“McIntosh”)——那么最简单的方法可能是使用 TStringList,提供了

  1. 你让你的文件完全由Key=Value行组成,而不是Key,Value
  2. 你要么需要它区分大小写,要么对文件执行大写。

然后你使用http://docwiki.embarcadero.com/Libraries/XE3/en/System.Classes.TStrings.Values

为了加快速度,您可以使用 IniFiles 单元的 THashedStringList。在 JclXML 单元中的 JCL 中也有类似的东西。

于 2012-12-21T10:55:45.743 回答