0

我有一个文件,我必须处理这个文件,但我必须只选择文件的最后一行,并检查这一行是否以数字 9 开头,我该如何使用 linq ... 来做到这一点?

这条以数字 9 开头的记录有时可能不是文件的最后一行,因为最后一行可以是 \r\n

我制作了一个简单的系统来制作这个:

var lines = File.ReadAllLines(file);

for (int i = 0; i < lines.Length; i++)
{
    if (lines[i].StartsWith("9"))
    {
        //...
    }
}

但是,我想知道是否有可能让一些东西变得更快......或者,更好的是,使用 linq...... :)

4

5 回答 5

2
string output=File.ReadAllLines(path)
                  .Last(x=>!Regex.IsMatch(x,@"^[\r\n]*$")); 
if(output.StartsWith("9"))//found
于 2013-07-29T15:05:39.103 回答
2

其他答案很好,但以下对我来说更直观(我喜欢自记录代码):

编辑:误解了你的问题,更新我的示例代码更合适

var nonEmptyLines =
  from line in File.ReadAllLines(path)
  where !String.IsNullOrEmpty(line.Trim())
  select line;

if (nonEmptyLines.Any())
{
  var lastLine = nonEmptyLines.Last();
  if (lastLine.StartsWith("9")) // or char.IsDigit(lastLine.First()) for 'any number'
  {
    // Your logic here
  }
}
于 2013-07-29T15:12:28.913 回答
1

您不需要像下面这样的 LINQ 应该可以工作:

var fileLines = File.ReadAllLines("yourpath");
if(char.IsDigit(fileLines[fileLines.Count() - 1][0])
{
     //last line starts with a digit. 
}

或者要检查特定数字9,您可以执行以下操作:

if(fileLines.Last().StartsWith("9"))
于 2013-07-29T15:04:23.943 回答
1
if(list.Last(x =>!string.IsNullOrWhiteSpace(x)).StartsWith("9"))
{
}
于 2013-07-29T15:15:31.467 回答
0

由于您需要检查最后两行(如果最后一行是换行符),您可以这样做。您可以更改lines为要检查的最后几行。

int lines = 2;
if(File.ReadLines(file).Reverse().Take(lines).Any(x => x.StartsWith("9")))
{
    //one of the last X lines starts with 9
}
else
{
    //none of the last X lines start with 9
}
于 2013-07-29T15:20:37.597 回答