-1

我正在阅读具有某种格式的文本文件。我跳过前两行,然后读取名字、名字,然后创建一个名字列表,第二个名字。一切都是工作文件,但是当最后一行为空时,我的程序停止工作并给出错误。如何避免空白以便我的程序不会停止我的代码是:

public void Read(string filename, List<Person> person)
{
   using (StreamReader sr = new StreamReader(filename))
   {
       sr.ReadLine();
       sr.ReadLine();
       while (!sr.EndOfStream)
       {
           FirstName= sr.EndOfStream ? string.Empty : sr.ReadLine();
           LastName= sr.EndOfStream ? string.Empty : sr.ReadLine();
           person.Add(new Person(FirstName, LastName));
       }
   }
}

文件格式为

Students Data
Description
FirstName
LastName
FirstName
LastName
FirstName
LastName
FirstName
LastName
4

2 回答 2

2

出了什么问题,sr.ReadLine()无论文档是否有下一行都会执行,所以它可能会返回 null (如果你已经用完了行)只需检查是否sr.ReadLine()返回null

public void Read(string filename, List<Person> person)
{
   using (StreamReader sr = new StreamReader(filename))
   {
       sr.ReadLine();
       sr.ReadLine();
       while (!sr.EndOfStream)
       {
           String FirstName = sr.ReadLine() ?? "-not defined-";
           String LastName = sr.ReadLine() ?? "-not defined-";

           person.Add(new Person(FirstName, LastName));
       }
   }
}
于 2013-09-06T08:47:21.683 回答
1

您可以为 StreamReader 类创建一个适配器,如下所示

public class NoBlankStreamReader : StreamReader
{
    public NoBlankStreamReader(FileStream fs) : base(fs) { }


    private bool IsBlank(string inString)
    {
        if (!string.IsNullOrEmpty(inString)) inString = inString.Trim();
        return string.IsNullOrEmpty(inString);
    }


    public override string ReadLine()
    {
        string result= base.ReadLine();
        while (result!=null && IsBlank(result))
            result = base.ReadLine();
        return result;
    }
}

然后像这样使用:

using (FileStream fs=File.OpenRead(@"test.txt"))
using (TextReader reader = new NoBlankStreamReader(fs))
{
    while (reader.Peek() > -1)
        Console.WriteLine(reader.ReadLine());
}

或者你可以看到帖子:

使用C#读取文本文件时如何删除空行

于 2013-09-06T08:53:01.057 回答