强制在自定义设置文件上使用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读取该文件,如果可以,如何读取?

强制在自定义设置文件上使用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" }

花些时间,采用相同的方法来解析动作设置。