0

ファイルがあり、このファイルを処理する必要がありますが、ファイルの最後の行だけを選択し、この行が数字の 9 で始まるかどうかを確認する必要があります。linq を使用してこれを行うにはどうすればよいですか ... ?

番号 9 で始まるこのレコードは、最終行が \r\n になる可能性があるため、ファイルの最終行ではない場合があります。

私はこれを作るために1つの簡単なシステムを作りました:

var lines = File.ReadAllLines(file);

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

しかし、何かをより高速にすることが可能かどうかを知りたいです...または、もっと良いことに、linqを使用して... :)

4

5 に答える 5

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 に答える
2
string output=File.ReadAllLines(path)
                  .Last(x=>!Regex.IsMatch(x,@"^[\r\n]*$")); 
if(output.StartsWith("9"))//found
于 2013-07-29T15:05:39.103 に答える
1
if(list.Last(x =>!string.IsNullOrWhiteSpace(x)).StartsWith("9"))
{
}
于 2013-07-29T15:15:31.467 に答える
0

最後の 2 行をチェックする必要があるため (最後の行が改行の場合)、これを行うことができます。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 に答える