【问题标题】:Get Second Instance of Reading a Text File using StartsWith()使用 StartsWith() 获取读取文本文件的第二个实例
【发布时间】:2021-06-29 09:03:27
【问题描述】:

我正在从一个文本文件中读取以查找某行以我的条件开头的行索引。
事实证明,我想要的标准实际上有两个实例,我想获得第二个。
我将如何修改以下代码以跳过第一个实例并获取第二个实例?

var linesB = File.ReadAllLines(In_EmailBody);
int LineNumberB = 0;
string criteriaB = "T:";
for (LineNumberB = 0; LineNumberB < linesB.Length; LineNumberB++){
    if(linesB[LineNumberB].StartsWith(criteriaB))
        break;
}

我使用之后的结果并将其与另一个标准进行比较,以找出两个结果之间的行数。

【问题讨论】:

  • 为什么不计算符合条件的出现次数?一旦计数超过某个值(在您的情况下为 2),就中断?
  • 您应该使用 IndexOf(不是 StartsWith)。第二次出现可以通过使用 Substring(indexof + 1).IndexOf 找到,它是第二次出现的开始位置。第二次出现,您必须将第一个索引与第二个索引相加。

标签: c# indexing text-files file.readalllines line-count


【解决方案1】:

您可以使用以下 LINQ 查询来简化您的任务:

List<string> twoMatchingLines = File.ReadLines(In_EmailBody)
    .Where(line = > line.StartsWith(criteriaB))
    .Take(2)
    .ToList();

现在你已经在列表中了。

string first = twoMatchingLines.ElementAtOrDefault(0);  // null if empty
string second = twoMatchingLines.ElementAtOrDefault(1); // null if empty or only one

如果你想使用 for 循环(你的最后一句话建议它),你可以计算匹配的行:

int matchCount = 0;
for (int i = 0; i < linesB.Length; i++)
{
    if(linesB[i].StartsWith(criteriaB) && ++matchCount == 2)
    {
        // here you are
    }
}

【讨论】:

  • 感谢您的建议!更有意义。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多