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

时间:2015-10-14 11:31:03

标签: c# .net

正如我在earlier中提到的一个帖子中所提到的,我试图从一个超过8K行的单个方法中解析一些代码段。它主要是数据集中一堆字段的重复,硬编码逻辑。

示例数据我解析看起来像这样;

enctype="multipart/form-data"

从本质上讲,我想做的是在每个"对之间获得所有线路。 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("循环的第一行识别validationHeader的实例时出现了问题,但我似乎无法辨别逻辑错误的位置。

我如何找到&#34;对&#34; while s然后得到这些对之间的界线?

我看到了这些SO线程但我并不真正理解如何翻译&#39;它是出于我的目的;

https://stackoverflow.com/a/20360426/1189566

https://stackoverflow.com/a/6562086/1189566

1 个答案:

答案 0 :(得分:0)

使用此解决方案:

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()一起循环并写入{{ 1}}到文件。