Чтение из последовательного файла в массив структур - PullRequest
2 голосов
/ 14 августа 2011

У меня есть следующая структура:

    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

и т.д.

Как лучше всего прочитать данные из этого файла и загрузить их в массив структур?

Ответы [ 2 ]

1 голос
/ 14 августа 2011

Предполагая, что ваш файл имеет одно значение на строку:

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 # относительно необходимости переопределенияToString() в вашем struct, следующее может помочь решить вашу проблему с печатью значений:

В структуре StudentDetails (взято из ответа Ника Брэдли):

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();
}
1 голос
/ 14 августа 2011

Изначально я буду использовать какую-то Сериализацию для записи в файл, так как он также позаботится и о части чтения.
Но, учитывая, как вы создали файл, яде использовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...