如何从键值文件创建字符串的关联数组(string[strings])



这里是我想要获得的关联数组的示例:

string [string] rlist = ["dima":"first", "masha":"second", "roma":"third"];

我读到的文本文件结构非常简单:

peter = fourth ivan = fifth david = sixth

string [string] strarr;    
string txt = readText("test.txt");
foreach (t;txt.splitLines())
{
    // ??
}

有人能提出建议吗?

可能是我,但我发现很难用for循环和临时变量来推理,我宁愿做这样的事情:

import std.conv;
import std.stdio;
import std.array;
import std.algorithm;
void main() {
    string[string] dic = File("test")
                              .byLine
                              .map!(l => l.to!string.findSplit(" = "))
                              .map!(l => tuple( l[0], l[2] ))
                              .assocArray;
}

byLine:一行一行地读,比把整件事读完再拆分要好。

第一张地图:按照rcorre 的解释,将每条线分成三部分

第二张地图:从分割线构建对

assocArray:从这些对构建一个关联数组。

尝试以下操作:

  import std.string : splitLines, strip;
  import std.file : readText;
  import std.algorithm : findSplit;
  string[string] strarr;
  string txt = readText("test.txt");
  foreach(t ; txt.splitLines()) {
    auto res = t.findSplit("=");
    string key = res[0].strip;
    string val = res[2].strip;
    strarr[key] = val;
  }

findSplit将返回三个范围:"="、"="之前的部分和"="之后的部分。strip可用于删除=周围的空白,否则这些空白将包含在键和值中。

如果您想要一个更健壮的解决方案,可以考虑使用D库来读取config/ini文件,如onyx-config、ctini或dini。

相关内容