获取带有一些数字的开头

时间:2013-07-29 15:00:49

标签: c# linq

我有一个文件,我必须处理这个文件,但我必须选择文件的最后一行,并检查这行是否以数字9开头,我怎么能用linq ...?

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

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

var lines = File.ReadAllLines(file);

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

但是,我想知道是否有可能做得更快......或者更好,使用linq ......:)

5 个答案:

答案 0 :(得分:2)

string output=File.ReadAllLines(path)
                  .Last(x=>!Regex.IsMatch(x,@"^[\r\n]*$")); 
if(output.StartsWith("9"))//found

答案 1 :(得分: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"))

答案 2 :(得分:1)

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

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

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
  }
}

答案 3 :(得分:1)

if(list.Last(x =>!string.IsNullOrWhiteSpace(x)).StartsWith("9"))
{
}

答案 4 :(得分: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
}