diff --git a/README.md b/README.md index 67d646b..6247841 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Наработки D **Содержит модули:** -- [cfg.d](cdf.d) - чтение конфигурационного файла в формате `Параметр = Значение` \ No newline at end of file +- [cfg.d](cfg.d) - чтение конфигурационного файла в формате `Параметр = Значение` +- [cfg_oneline.d](cfg_oneline.d) (тест) - чтение конфигурационного файла в формате `Параметр = Значение` \ No newline at end of file diff --git a/cfg_oneline.d b/cfg_oneline.d new file mode 100644 index 0000000..946af2b --- /dev/null +++ b/cfg_oneline.d @@ -0,0 +1,27 @@ +module azh.cfg_oneline; + +import std.regex; +import std.stdio; +import std.algorithm; +import std.array; +import std.typecons; +import std.functional; + +/** + * Тестовая функция + * Params: + * path = путь к файлу конфигурации + * Returns: ассоциативный массив ['Параметр' => 'Значение'] + */ +string[string] readConfigFile(string path) +{ + auto p_property = regex(r"^ *(\w+) *= *(.+) *$", "r"); + const properties = File(path) + .byLineCopy + .map!(line => matchFirst(line, p_property)) + .filter!(m => !m.empty) // OR: .filter!(not!empty) + .map!(m => tuple(m[1], m[2])) + .assocArray; + + return properties; +} \ No newline at end of file