Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
16 / 16 / 10
Регистрация: 23.09.2014
Сообщений: 136
1

Сериализация структуры и пошаговое считывания данных из файла

14.05.2015, 16:23. Показов 1956. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем!!!
Проблема следующая: есть класс метод которого генерирует большое количество данных с последующей записью в структуру. Она после каждого шага цикла должна записываться в файл "*.xml" (тот самый што предыдущая).
Также нужно организовать пошаговое считывания этих данных из файла.
Пробовал что-то писать:
Структура:
C#
1
2
3
4
5
6
public struct B
    {
        public Vector3 B_vect;
        public double B_abs;
        public Vector3 XYZ;
    }
Часть метода записи с циклом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int x = (int)UP_Limit[0] + 1; x <= (int)HIGH_Limit[0]; x++)
            {
                for (int y = (int)UP_Limit[1] + 1; y <= (int)HIGH_Limit[1]; y++)
                {
                    for (int z = (int)UP_Limit[2] + 1; z <= (int)HIGH_Limit[2]; z++)
                    {
                        B Bl = new B();
                        Bl.XYZ = new Vector3(x, y, x);
                        Bl.B_vect = new Vector3(One_Point(Bl.XYZ));
                        Bl.B_abs = lenght(Bl.B_vect);
                        formatter.Serialize(stream, Bl);
                        context.Send(OnProgressReport_X, 1 + 100 * (z - 1) / c);
                       }
                 }
           }
Что получается (файл не полностью и даже не полностью сериализация структуры):
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
</B><?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
</B><?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
</B><?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
</B><?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>

Метод десериализации(Не может десериализувать структуру):
C#
1
2
3
4
5
6
B Bl;
            using (FileStream fs = new FileStream(file+".xml", FileMode.OpenOrCreate))
            {
                Bl = (B)formatter.Deserialize(fs);
            }
            return Bl;
Как мне организовать сериализацию структуры с пошаговою записью ее в файл.
Заранее благодарю !!!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2015, 16:23
Ответы с готовыми решениями:

В какой тип данных переводить из wav-файла раздел data после считывания байтов
Добрый вечер, суть вопроса: 1) Что получает на вход БПФ и что выдает ( в каком формате ), иными...

Удаление элемента структуры для правильного считывания WAV-файла
Господа, возник такой вопрос: Мне необходимо удалить элемент структуры. Это необходимо для...

По поводу считывания из html файла данных
Точнее вопрос не в самом считывании, а в том как этот файл достать из браузера? Пишу в codeblocks...

Не работает цикл считывания данных из файла
Создал программу которая должна считывать 25 чисел из 1 файла , и во время считывания записивать их...

5
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 4
14.05.2015, 16:40 2
засунь структуру в массив и сериализуй массив
или
упакуй структуру сериализуй =>десериализуй =>распакуй структуру.
0
16 / 16 / 10
Регистрация: 23.09.2014
Сообщений: 136
14.05.2015, 17:24  [ТС] 3
Цитата Сообщение от aslan125 Посмотреть сообщение
засунь структуру в массив и сериализуй массив
или
упакуй структуру сериализуй =>десериализуй =>распакуй структуру.
Массив структур не влезает в память !!!
Поэтому было решено сразу писать на винчестер.
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
14.05.2015, 18:56 4
Лучший ответ Сообщение было отмечено Neptyn как решение

Решение

Neptyn, могу предложить велосипед. Примерно в таком духе...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.IO;
using System.Xml.Linq;
 
namespace ConsoleApplication2 {
    class Program {
        static void Main(string[] args) {
            List<STR> strs = new List<STR>();
            Random r = new Random();
            for (int i = 0; i < 10; i++) {
                strs.Add(new STR { X = (100 * r.NextDouble()), Y = (200 * r.NextDouble()) });
            }
            using (Stream fs = new FileStream(@"C:\123.xml", FileMode.Append, FileAccess.Write)) {
                using (StreamWriter sw = new StreamWriter(fs)) {
                    foreach (var s in strs) {
                        sw.Write(string.Format("{0}\n",s.ToString()));
                    }
                }
            }            
            Console.ReadLine();
        }
    }
    struct STR {
        public double X;
        public double Y;
 
        public override string ToString() {
            XDocument doc=new XDocument(new XElement("STR",
                new XElement("X", X),
                new XElement("Y", Y)));
            return doc.ToString();
        }
    }
}
1
16 / 16 / 10
Регистрация: 23.09.2014
Сообщений: 136
14.05.2015, 19:08  [ТС] 5
insite2012, Большое Вам Спасибо!!!
Только есть вопрос: Как потом это считывать?
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
14.05.2015, 19:13 6
Цитата Сообщение от Neptyn Посмотреть сообщение
есть вопрос: Как потом это считывать?
Ну это просто пример, доведите его до ума. Сам принцип прост - переопределяем ToString() у структуры, чтобы формировать корректный Xml элемент.
1
14.05.2015, 19:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2015, 19:13
Помогаю со студенческими работами здесь

Реализовать функцию считывания данных массива с файла
Добрый вечер. Замотали меня на паре. Нужно переделать код... #include &quot;stdafx.h&quot; #include...

WinCC. Скрипт считывания данных из файла Data.db
Добрый день. Возникла проблема считывания данных из файла Data.db. Вот скрипт. #include...

Макрос assert() для считывания данных из файла из указанного диапазона
Нужно считать даные из текстового файла и определить сколько есть чисел, букв, пробелов и т.д. Это...

Функция считывания данных из файла: прошу совет по оптимизации кода
Код работает, но изящным его назвать очень тяжело. Прошу советов по сокращению и оптимизации...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru