如何从2个动态位置之间的文件中获取行
本文关键字:文件 获取 之间 位置 2个 动态 | 更新日期: 2023-09-27 18:17:34
正如我在前面提到的一个线程中所指出的,我试图从一个超过8K行的方法中解析一些代码段。它主要是数据集中一堆字段的重复硬编码逻辑。
我正在解析的样本数据看起来像这样;
temp_str = ds->Fields->FieldsByName("Field1")->AsString;
if (temp_str.IsEmpty())
//do something
else
//do something else
temp_str = ds->Fields-FieldsByName("Field2")->AsString;
if (differentCondition)
//do something
else
//do some other thing
本质上,我想做的是获得temp_str = ...
行"对"之间的所有行,然后收集每一组唯一的验证规则。但是我在定位这些代码段时遇到了一点麻烦。
我的方法是这样的:
while (lines.Any(stringToCheck => stringToCheck.Contains(validationHeader)))
{
startOfNextValidation = lines.IndexOf(lines.First(s => s.Contains(validationHeader)), lines.IndexOf(validationHeader) + 1);
if (startOfNextValidation > lines.Count || startOfNextValidation <= 0)
break;
validations.Add(GetString(lines.GetRange(0, startOfNextValidation)));
lines.RemoveRange(0, startOfNextValidation);
}
string validationHeader
变量就是temp_str = ds->Fields->FieldsByName("
。
这成功地识别了我的第一个验证块,但随后它没有发现任何其他内容,这是不正确的。在我的while
循环中,我如何识别第一行validationHeader
的实例有问题,但我似乎无法辨别逻辑错误在哪里。
我如何找到validationHeader
s的"对",然后得到这些对之间的线?
我看到了这些SO线程,但我真的不明白如何"翻译"它为我的目的;
https://stackoverflow.com/a/20360426/1189566 https://stackoverflow.com/a/6562086/1189566最后得出结论:
List<string> lines = File.ReadAllLines(file).ToList<string>();
List<string> validations = new List<string>();
List<int> allIndices = lines.Select((s, i) => new { Str = s, Index = i })
.Where(x => x.Str.Contains(validationHeader))
.Select(x => x.Index).ToList<int>();
for (int j = 0; j < allIndices.Count() - 1; j++)
{
int count = (allIndices[j + 1] - allIndices[j]);
validations.Add(GetString(lines.GetRange(allIndices[j], count)));
}
lines
包含file
vaidations
包含在我原来的问题
validationHeader
之间的代码段 allIndices
只包含每个validationHeader
的索引
GetString(List<string>)
只返回一个包含给定范围内所有元素的单个字符串,然后将其添加到我的validations
列表中,我稍后用foreach var v in validations.Distinct()
循环并将v
写入文件。