我们有一个自定义.settings文件,我们用它来存储在某些情况下定义的变量和自定义操作。
基本上我们所拥有的只是一种格式,无法读取它。我确实提出了一个想法,但很快被拒绝了,我被告知我们必须使用Linq"。
现在我坐在这里想知道我将如何做到这一点。我们的文件看起来像这样:
[SET Name:"NeverAcquireRemoteFiles" Value:"False"]
[SET Name:"CheckForUpdates" Value:"True"]
[SET Name:"" Value:""]
[SET Name:"" Value:""]
[PERFORM Action:"AcquireRemoteFiles" When:"ApplicationWindowShown"]
[PERFORM Action:"CheckForUpdates" When:""]
[PERFORM Action:"" When:""]
[PERFORM Action:"" When:""]
[PERFORM Action:"" When:""]
[PERFORM Action:"" When:""]
[PERFORM Action:"" When:""]
[PERFORM Action:"" When:""]
请注意空行,他们只是在那里证明此文件中没有特定数量的行,设置或操作。
老实说,我对Linq的了解不足以解决这个问题(不需要多花点时间),我只是不知道如何针对这个文件编写查询。
以SET
开头的行是变量。 Name属性表示变量的名称,而Value表示它的值(duh)。以PERFORM开头的行是动作。我想你知道其他的。
基本上,我们有一些"阶段"在我们的应用程序中,我们可能需要或不需要做某些事情。并且这些不一定是可以100%准确自动化的事情。我们需要100%的准确性。因此,设置文件的想法。根据条件和当前情况,我们在启动应用程序之前修改或删除或添加到设置文件。
是否可以使用Linq读取此文件,如果是,如何?
答案 0 :(得分:4)
我建议您使用正则表达式来解析配置文件中的行。例如。获取变量设置将如下所示:
var regex = new Regex(@"\[SET Name:""(?<name>\w+)"" Value:""(?<value>\w*)""\]");
var variables = File.ReadLines("legacy.config")
.Select(l => regex.Match(l))
.Where(m => m.Success)
.Select(m => new {
Name = m.Groups["name"].Value,
Value = m.Groups["value"].Value
}).ToArray();
或查询语法
var variables = from l in File.ReadLines("legacy.config")
let m = regex.Match(l)
where m.Success
select new {
Name = m.Groups["name"].Value,
Value = m.Groups["value"].Value
};
输出:
{ Name = "NeverAcquireRemoteFiles", Value = "False" }
{ Name = "CheckForUpdates", Value = "True" }
花一些时间,采用相同的方法解析动作设置。