我有一个文件,我必须处理这个文件,但我必须选择文件的最后一行,并检查这行是否以数字9开头,我怎么能用linq ...?
此记录以数字9开头,有时可能不是文件的最后一行,因为最后一行可以是\ r \ n
我编写了一个简单的系统来制作这个:
var lines = File.ReadAllLines(file);
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].StartsWith("9"))
{
//...
}
}
但是,我想知道是否有可能做得更快......或者更好,使用linq ......:)
答案 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
}