C# StreamReader

问题描述 投票:0回答:1

我尝试使用流读取器在我的对象 Personen 中保存此文本数据。但我不知道如何告诉我的程序阅读所有这些。如果我只需要拆分一个参数,那不是问题。如果这个文本只用“;”来写无需空格键或换行符,我就可以阅读、保存并给出解决方案。但如果我的代码中出现更复杂的内容,我不知道如何全部读出

穆罕默德;德米拉亚克;IT
1
埃姆雷;阿拉兹;Sekten Chef
1
努斯莱特;贝加诺维奇;凯因·格尔德
2
费尔哈特;宏碁;宏碁电脑
2
费夫齐;乌尊;特拉布宗
public void read()
{
   StreamReader sr = new StreamReader(datei);
   string s;
   int i = 0;

    while ((s = sr.ReadLine()) != null)
     {
          string[] l = s.Split(";");
      if(s.StartsWith("1") || s.StartsWith("2"))
      {
          p[i] = new Personen(l[0], l[1], l[2]);
          Console.WriteLine(p[i]);
          i++;
      }
   }

}
c# streamreader
1个回答
0
投票

正如 @HansPassant 在 comment 中所建议的,您可以放置一个额外的 sr.ReadLine() ,仅当您遇到“1”或“2”时才会调用该函数并跳转到循环内读取下一行:

public void read()
{
    using StreamReader sr = new StreamReader(datei);
    string s;
    int i = 0;

    while ((s = sr.ReadLine()) != null)
    {
        var lineStartsWithControlDigit = s[0] == '1' || s[0] == '2';

        if(lineStartsWithControlDigit)
        {
            var nextLineHasNames = sr.ReadLine();
            var l = nextLineHasNames.Split(";");

            p[i] = new Personen(l[0], l[1], l[2]);
            Console.WriteLine(p[i]);
            i++;
        }
    }
}

另请注意,您的语句 Console.WriteLine(p[i]) 将仅打印

"Personen"
,这没有多大意义。为了让它很好地打印
p[i]
中Personen对象的内容,你可以重写
ToString()
中的方法
class Personen

public class Personen
{
    string FirstPerson { get; set; }
    string SecondPerson { get; set; }
    string ThirdPerson { get; set; }

    public Personen(string firstPerson, string secondPerson, string thirdPerson)
    {
        FirstPerson = firstPerson;
        SecondPerson = secondPerson;
        ThirdPerson = thirdPerson;
    }

    public override string ToString()
    {
        return $"{FirstPerson};{SecondPerson};{ThirdPerson}";
    }
}

运行程序并调用 read() 会在控制台中产生以下输出:

Emre;Araz;Sekten Chef
Nusret;Beganovic;Kein Geld
Ferhat;Acer;Acer Computer
Fevzi;Uzun;Trabzon

使用完流后关闭流非常重要,这就是为什么我还在

using
的实例化前面添加了
Streamreader sr
。有关此内容的更多信息,请参阅使用 C# 中的 StreamReader 将文件加载到字符串变量时是否需要显式关闭它?

© www.soinside.com 2019 - 2024. All rights reserved.