如何从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

如何从2个动态位置之间的文件中获取行

最后得出结论:

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写入文件。