获取文本文件中的最后两行

时间:2011-12-20 22:02:41

标签: c# asp.net linq

所以我在文本文件中创建一个行列表,如下所示:

var lines = File.ReadAllLines("C:\\FileToSearch.txt")
                .Where(x => !x.EndsWith("999999999999"));

并像这样循环遍历

foreach (var line in lines)
{ 
    if (lineCounter == 1)
    {
        outputResults.Add(oData.ToCanadianFormatFileHeader());
    }
    else if (lineCounter == 2)
    {
        outputResults.Add(oData.ToCanadianFormatBatchHeader());
    }
    else
    {
        oData.FromUsLineFormat(line);
        outputResults.Add(oData.ToCanadianLineFormat());

    }
    lineCounter = lineCounter + 1;
    textBuilder += (line + "<br>");
}

就像我访问前两行一样,我想分别访问最后一行和第二行

2 个答案:

答案 0 :(得分:11)

在这里,您可以再次利用LINQ:

var numberOfLinesToTake = 2;
var lastTwoLines = lines
     .Skip(Math.Max(0, lines.Count() - numberOfLinesToTake))
     .Take(numberOfLinesToTake);

var secondToLastLine = lastTwoLines.First();
var lastLine = lastTwoLines.Last();

或者,如果您想单独检索它们:

var lastLine = lines.Last();
var secondToLastLine = 
    lines.Skip(Math.Max(0, lines.Count() - 2)).Take(1).First();

我在最后添加了.First(),因为.Take(1)将返回一个包含一个项目的数组,然后我们会使用First()抓取该数据。这可能是优化的。

同样,您可能希望熟悉LINQ,因为它有时可以节省时间。

答案 1 :(得分:0)

在不合适时使用 var 的问题之一。

ReadAllLines返回一个字符串数组: string []

您可以从末尾向后获取数组和索引的长度。