所以我使用List<string> YAMLFileLines = new List<string>();
来存储文本文件的行,如下所示
while ((FileLine = r.ReadLine()) != null)
{
YAMLFileLines.Add(FileLine);
}
现在稍后,我正在使用正则表达式模式评估每一行,如下所示:
foreach (string Incoming_Line in YAMLFileLines)
{
string pattern = @"([\#-]+) { prop: ([a-z A-Z _]+), value: ([0-9 a-z A-Z \[ \] \= \"" \, \. \/ ]+) }";
Match Line_Match = Regex.Match(Incoming_Line, pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
if (Line_Match.Success)
{
string HashValue = Line_Match.Groups[1].Value; // Stpres the #- or just - value
string VarieName = Line_Match.Groups[2].Value; // Stores the Srv_Port paramater
string VariValue = Line_Match.Groups[3].Value; // Stores the 30000 value
bool KeepOriginalHash = false; // Force this to false for now
switch (VarieName)
{
case "Srv_Port":
{
if (KeepOriginalHash == true)
{
string FileLine = HashValue + " { prop: " + VarieName + ", value: " + textBox_Srv_Port.Text + " }"; // Allow #- or - at start of string
WriteFileLines.Add(FileLine);
}
else if (KeepOriginalHash == false)
{
string FileLine = "- { prop: " + VarieName + ", value: " + textBox_Srv_Port.Text + " }"; // Remove #- from start of string. All Unlocked
WriteFileLines.Add(FileLine);
}
break;
}
}
}
}
我正在做的是为其中一个与文本文件中的变量名匹配的匹配组创建一个switch case。然后,我想在表单上使用textBox.Text将值放入行并将其写回新的列表WriteFileLines.Add(FileLine);
现在我的示例确实有点工作但问题是我必须准确指定将被写回新列表,例如,此行- { prop: " + VarieName + ", value: " + textBox_Srv_Port.Text + " }
最终会在-" { prop: Srv_Port, value: 30000 }
中以List<string> WriteFileLines = new List<string>();
结尾。问题是它会删除该行中的注释传入的文本文件行,看起来像这样-" { prop: Srv_Port, value: 52386 } #Recommended port range between 49152 - 65535
我不想在任何读入的文件行中丢失任何内容。我只想将模式与3组匹配,然后更改其中一个组的值,并将整行再次写入新列表。
总结一下。我想逐行读取一个文本文件到List对象。示例文本文件行是
- { prop: Srv_Port, value: 52386 } #Recommended port range between 49152 - 65535
我希望匹配3个组,根据其他组的状态更改其中一个组的值,然后将读回的整行写回新的List对象。
我看过regex.Replace但是在我看过的所有例子中它似乎只给你一个模式替换的结果。而不是整个行的变化。