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

时间:2015-04-05 19:08:23

标签: arrays multidimensional-array d

这里我想得到的关联数组示例:

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())
{
    // ??
}

有人可以提出建议吗?

2 个答案:

答案 0 :(得分:5)

可能是我,但我觉得很难用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:从这些对中构建一个关联数组。

答案 1 :(得分:1)

尝试以下方法:

  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库来读取onyx-configctinidini等配置/ ini文件。