从顺序文件读入结构体数组
本文关键字:结构体 数组 顺序文件 | 更新日期: 2023-09-27 18:05:37
我有以下结构体:
public struct StudentDetails
{
public string unitCode; //eg CSC10208
public string unitNumber; //unique identifier
public string firstName; //first name
public string lastName;// last or family name
public int studentMark; //student mark
}
使用该结构体将数据写入顺序文件。文件中的数据如下:
ABC123
1
John
Doe
95
DCE433
3
Sherlock
Holmes
100
ASD768
5
Chuck
Norris
101
等。从文件中读取数据并将其加载到结构体数组的最佳方法是什么?
假设你的文件每行只有一个值:
List<StudentDetails> studentList = new List<StudentDetails>();
using (StreamReader sr = new StreamReader(@"filename"))
{
while (!sr.EndOfStream)
{
StudentDetails student;
student.unitCode = sr.ReadLine();
student.unitNumber = sr.ReadLine();
student.firstName = sr.ReadLine();
student.lastName = sr.ReadLine();
student.studentMark = Convert.ToInt32(sr.ReadLine());
studentList.Add(student);
}
StudentDetail[] studentArray = studentList.ToArray();
}
请注意,这不是很健壮-如果每个学生没有5行,你会遇到问题,或者如果最后一个学生少于5行。
编辑
从你之前的问题中吸取教训,c#中的结构数组需要在struct
中覆盖ToString()
,以下可能有助于解决打印值的问题:
在StudentDetails结构中(取自Nick Bradley的回答):
public override string ToString()
{
return string.Format("{0}, {1}, {2}, {3}, {4}", unitCode,
unitNumber, firstName, lastName, studentMark);
}
那么你可以简单地遍历数组:
for (int i = 0; i < studentArray.Length; i++)
{
Console.WriteLine("Student #{0}:", i);
Console.WriteLine(studentArray[i]);
Console.WriteLine();
}
最初我使用某种序列化来写入文件,因为它也会处理读取部分。
但是考虑到您创建文件的方式,我将使用StreamReader和它的ReadLine()方法-因为您知道您向服务器写入的属性的顺序:
string line = "";
while ((line = reader.ReadLine()) != null)
{
YourStruct t = new YourStruct();
t.unitCode = line;
t.unitNumber = reader.ReadLine();
...
resultArray.Add(t);
}
reader.Close(); reader.Dispose();