[英]Test if there's no more text in text file in c#
我的代碼如下所示:
System.IO.StreamReader savednames =
new System.IO.StreamReader(@"c:\users\example\text.txt");
while ((line = savednames.ReadLine()) != null)
{
if (line == null)
{
Console.WriteLine("No more content!");
} }
(是的,當while為true時有代碼,但是在這里不相關),這是行不通的,我在網上搜索了很多,但沒有找到答案。 我想檢查文本文檔中的下一行是否為空,如果是,請說“ no more lines”或類似符號。該行既不為null,也不為“”。 希望能有所幫助!
發生這種情況的原因是,當到達文件末尾時,while循環的條件為false,並且未輸入正文,因此不會打印該消息。
如下更改循環:
while (true)
{
var line = savednames.ReadLine();
if (line == null)
{
Console.WriteLine("No more content!");
break;
}
}
請注意,這僅在到達文件末尾時才終止循環。 它不會僅僅因為文件中的一行為空而終止它。
如果要在空行處終止循環,請使用:
while (true)
{
var line = savednames.ReadLine();
if (string.IsNullOrEmpty(line))
{
Console.WriteLine("No more content!");
break;
}
}
如果您想在空行或空白行上終止循環,請使用:
while (true)
{
var line = savednames.ReadLine();
if (string.IsNullOrWhiteSpace(line))
{
Console.WriteLine("No more content!");
break;
}
}
這種循環結構在讀取文件時非常普遍。 它被稱為“半圈”。
請注意,可能有更好的方法來執行此操作,避免使用“半圈”(有些人不喜歡)。
例如,您可以使用File.ReadLines()
方法從文件中獲取所有行,而無需進行緩沖:
foreach (string line in File.ReadLines(@"c:\users\example\text.txt"))
{
// Do something with line
}
Console.WriteLine("No more content!");
如果只想處理到第一條非空行(如上面的第二個循環示例),則可以這樣編寫:
var linesUntilFirstEmpty =
File.ReadLines(@"c:\users\example\text.txt")
.TakeWhile(line => !string.IsNullOrEmpty(line));
foreach (string line in linesUntilFirstEmpty)
{
// Do something with line
}
Console.WriteLine("No more content!");
如果要處理行直到第一個空白或為空,請執行以下操作:
var linesUntilFirstBlankOrEmpty =
File.ReadLines(@"c:\users\example\text.txt")
.TakeWhile(line => !string.IsNullOrWhiteSpace(line));
foreach (string line in linesUntilFirstBlankOrEmpty)
{
// Do something with line
}
Console.WriteLine("No more content!");
為了獲得預期的輸出,您需要更改while循環的條件。 像這樣使while循環...
while (true)
{
var line = savednames.ReadLine();
if (string.IsNullOrEmpty(line))
{
Console.WriteLine("No more content!");
break;
}
}
我希望這是您想要的...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.