这里我想得到的关联数组示例:
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())
{
// ??
}
有人可以提出建议吗?
答案 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-config,ctini或dini等配置/ ini文件。