2013-07-29 50 views
0

我有一個文件,我必須處理這個文件,但我必須選擇文件的最後一行,並檢查這一行是否以數字9開頭,我該怎麼辦這使用LINQ ...?獲取以一些數字開頭的行

這個紀錄,這與9號開始,有時,不是文件的最後一行,因爲最後一行可以是\ r \ n

我maded一個簡單的系統,使thsi:

var lines = File.ReadAllLines(file); 

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

但是,我whant知道是否可能使更多的東西快......或者,更多更好的,使用LINQ ... :)

+0

爲什麼在閱讀文件時不檢查它?或者你有一些已經閱讀過的行集合? –

+2

這不是你應該使用LINQ for的東西。簡單地解析文件並檢查最後一行。 –

+0

我提出了一些問題...... :) – Alexandre

回答

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

你犯了一個錯字'StartsWith'而不是'StartWith'。 –

+0

@KingKing oops ..編輯..謝謝 – Anirudha

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")) 
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 
    } 
} 
1
if(list.Last(x =>!string.IsNullOrWhiteSpace(x)).StartsWith("9")) 
{ 
} 
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 
} 
相關問題