如何从逗号分隔的字符串对列表中填充TDictionay?

时间:2012-12-21 08:28:45

标签: delphi tdictionary

我希望有一个包含字符串列表的文本文件(比如用逗号分隔的逗号和可用于自动替换的值),并将每个键值对存储在TDictionary<string, string>中。如何填写字典?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

  1. 你的文件完全是Key=Value行,而不是Key,Value
  2. 您需要区分大小写或对文件执行UpperCase。
  3. 然后你使用http://docwiki.embarcadero.com/Libraries/XE3/en/System.Classes.TStrings.Values

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