强制在自定义设置文件上使用Linq,但无法弄清楚
本文关键字:Linq 弄清楚 自定义 设置 文件 | 更新日期: 2023-09-27 18:02:13
我们有一个自定义的。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表示它的值。以PERFORM开头的行是操作。我想你知道剩下的了。
基本上,我们在应用程序中有特定的"阶段",我们可能需要或不需要做某些事情。这些事情不一定能100%精确地自动化。我们需要100%的准确性。因此有了设置文件的概念。根据条件和当前情况,我们在启动应用程序之前修改或删除或添加设置文件。
是否可以使用Linq读取该文件,如果可以,如何读取?
我建议您使用正则表达式来解析配置文件中的行。例如,获取变量设置看起来像:
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" }
花些时间,采用相同的方法来解析动作设置。