簡體   English   中英

測試C#文本文件中是否沒有更多文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM