Запись и чтение структур из файла

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

SBJocker
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 19.01.2004 (Пн) 16:57

Запись и чтение структур из файла

Сообщение SBJocker » 29.03.2006 (Ср) 14:53

На VB6 можно было записывать и читать структуры (там типы):

put h,, struct_var

и читать:

get h,,struct_var

А как сделать сабж на C#?

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 29.03.2006 (Ср) 23:32

SBJocker

Приветствую.
Про файл пока ничего не скажу.Только учусь.
Но как пользовать структуры и отображать данные на форме могу подсказать.
Ниже код из учебного проекта, имитируещего работу с различными данными, записанными в структуру.

декларация структуры с различными типами данных. Декларировать можно как в самой форме, так и в классе.
Код: Выделить всё
public struct gegevens (данные)
   {
      public int nr;(номер)
      public string naam; (фамилия)
      public string voornaam; (имя)
      public DateTime gebdat; (дата рождения)
      public long volgnr; (IDномер)
   }   

В коде формы заполняем структуру данными. (данные сгенерированы от балды, т.к. это учебный пример. В реале данные нужно будет забивать ручками)

Код: Выделить всё

      private void Tabelgenereren(int aantal) // создать таблицу(параметр - размер таблицы)
      {
         Random gen = new Random();
         int loper,getal; // счетчик, число
         TimeSpan dat;
         DateTime startdat=new DateTime(1980,1,1);
         gegevens el1; // элемент1 типа данные (из структуры)
         bool dubbels=false;
         for( loper = 0;loper< aantal;loper++)
         {
            getal = gen.Next(1, 998); //генерируем число
            el1.nr=loper; //присваиваем значение первому эл. структуры - номер
            el1.naam = Globals.nrToString(getal * loper+1); //присваиваем значение фамилии. там у меня спец класс в ктором функция заменяет сгенерированные числа на слова 1-один, 2-два
            el1.voornaam = Globals.nrToString(getal);  //присваиваем значение имени, тоже самое что и с фамилией
            el1.volgnr = getal; // присваиваем ID
            dat = new TimeSpan(getal, 0, 0, 0);
            if(getal%2 == 0)
               el1.gebdat = startdat.Add(dat); //присваиваем значение даты рождения. она тоже генериться
            else
               el1.gebdat = startdat.Subtract(dat);
            
                                try
            {   hashLijst.Add(el1.naam,el1);   }
            catch
            {   dubbels=true;}
         }
         if (dubbels)
            MessageBox.Show("dubbele waarden zijn eruit gehaald"); // конструкция try -catch  использована чтобы не было дубликатов
         
         tonen(); // void  вывода таблицы в листвью на форме.
      }


Т.е. заполнить структуру данными в принципе не сложно. Обьявил структуру и инициализировал экземпляр и вперед заполняй.

А вот в зависимости от того куда ты эти данные записал, в массив, в Array,ListArray, SortedList, Stack, Queue, Hashtable будут различные методы записи чтения.
В примере выше использовалась Hashtable.

А вот как это выводиться в листвью. типа чтение данных из структуры

Код: Выделить всё
//обьявляем в форме
private Hashtable hashLijst= new Hashtable();
//private SortedList orderLijst= new SortedList();

private void tonen()
      {
         int ndx=0;
         lstvData.Items.Clear();
//         gegevens el1;
//         for (ndx=0;ndx< orderLijst.Count;ndx++)
         foreach (gegevens el1 in hashLijst.Values)
         {
            //el1=(gegevens)orderLijst.GetByIndex(ndx);
            lstvData.Items.Add(el1.nr.ToString());
            lstvData.Items[ndx].SubItems.Add(el1.volgnr.ToString());
            lstvData.Items[ndx].SubItems.Add(el1.naam);
            lstvData.Items[ndx].SubItems.Add(el1.voornaam);
            lstvData.Items[ndx++].SubItems.Add(el1.gebdat.ToShortDateString());
         }
         lblCount.Text = "count: " + hashLijst.Count;
      }
тут в коментах код при использовании SortedList вместо Hashtable

Надеюсь что-то тебе поможет.
И посмотри msdn.

SBJocker
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 19.01.2004 (Пн) 16:57

Сообщение SBJocker » 30.03.2006 (Чт) 21:12

Спасибо, но меня интересовал файловый ввод-выввод целых структур (не отдельных полей)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.03.2006 (Чт) 21:18

Да собственно, Microsoft.VisualBasic.FileSystem.FilePut никто не отменял...
Изображение

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: Запись и чтение структур из файла

Сообщение codemaster » 31.03.2006 (Пт) 11:43

SBJocker писал(а):На VB6 можно было записывать и читать структуры (там типы):

put h,, struct_var

и читать:

get h,,struct_var

А как сделать сабж на C#?


см. http://www.codeproject.com/csharp/fastb ... einput.asp


Ссылка на сайте изменена на http://www.codeproject.com/cs/files/fas ... einput.asp
-- GSerg, 13.06.2006
//<-
Mit freundlichen Grüßen
//->

SBJocker
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 19.01.2004 (Пн) 16:57

Сообщение SBJocker » 31.03.2006 (Пт) 19:28

Огромное спасибо! То что нужно!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.04.2006 (Сб) 8:03

Удивительно...
Ещё один милый факт о FW в мою копилку.

Прочитав эту статью, можно сделать вывод "не используйте FW", но почему-то автор показывает, как изогнуться, чтобы заполнить собой его изгибы...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Neco
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 06.07.2005 (Ср) 1:21

Сообщение Neco » 11.11.2006 (Сб) 16:08

а почему бы не использовать сериализацию? хорошая же вещь...


Вернуться в C#

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList