我尝试使用流读取器在我的对象 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++;
}
}
}
正如 @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 将文件加载到字符串变量时是否需要显式关闭它?。