Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2008, 16:49   #11
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от _Инженер_ Посмотреть сообщение
Да, я тоже уже пришел к тому, что буду писать через fileStream. А поясните пожалуйста, зачем этот рекорд в рекорде? И чем плох string? Указатели будут перед записью в файл ликвидированы и заменены стринговыми идентификаторами или вроде того.
рекорд в рекорде чтобы записать/считать весь блок целиком а не отдельными полями. Со ссылками это невозможно, поэтому они вынесены в отдельный блок. Со строками то-же самое - обычные string - это ссылки, а shortString - массивы char. Впрочем, можно так не делать, тогда

fileStream.Write(KolVL, ...
fileStream.Write(KolMN, ...
...
alexBlack вне форума Ответить с цитированием
Старый 02.10.2008, 17:04   #12
_Инженер_
Пользователь
 
Регистрация: 19.06.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
рекорд в рекорде чтобы записать/считать весь блок целиком а не отдельными полями.
....
fileStream.Write(KolVL, ...
fileStream.Write(KolMN, ...
...
проблема в том, что мне надо записать даже не блок целиком - я бы пережил отдельное перечисление каждого поля, мне надо записать массив таких рекордов.

То есть я так понимаю, что нереально записать в файл без дополнительной головной боли массив с большой разнородностью внутри элементов?
_Инженер_ вне форума Ответить с цитированием
Старый 02.10.2008, 17:38   #13
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от _Инженер_ Посмотреть сообщение
проблема в том, что мне надо записать даже не блок целиком - я бы пережил отдельное перечисление каждого поля, мне надо записать массив таких рекордов.

То есть я так понимаю, что нереально записать в файл без дополнительной головной боли массив с большой разнородностью внутри элементов?
Что-то я не пойму. У Вас в массиве элементы разного типа ?
Тогда почему бы не использовать классы вместо record.

А если они одинаковые, то в чем проблема ? - цикл по элементам и запись
alexBlack вне форума Ответить с цитированием
Старый 02.10.2008, 17:43   #14
_Инженер_
Пользователь
 
Регистрация: 19.06.2008
Сообщений: 32
По умолчанию

Нет, элементы одинаковые. Просто элементы содержат разнородные поля. Ну я сверху привел пример. Насчет использования классов - это уже не сейчас. Надо сохранить и открыть то, что уже есть. Времени нет.
_Инженер_ вне форума Ответить с цитированием
Старый 02.10.2008, 18:00   #15
_Инженер_
Пользователь
 
Регистрация: 19.06.2008
Сообщений: 32
По умолчанию

то есть если убрать из рекорда ссылки (а можно их сделать просто nil или таких полей вовсе не должно быть?) а также заменить стринги, то будет работать fileStream.Write(record, sizeof(TPointMN)) ?

И как я понимаю получится множество файлов с отдельными элементами массива? Или их всех можно в единый файл затромбовать? А как их потом разделять при чтении?

Последний раз редактировалось _Инженер_; 02.10.2008 в 18:03.
_Инженер_ вне форума Ответить с цитированием
Старый 02.10.2008, 18:12   #16
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от _Инженер_ Посмотреть сообщение
то есть если убрать из рекорда ссылки (а можно их сделать просто nil или таких полей вовсе не должно быть?) а также заменить стринги, то будет работать fileStream.Write(record, sizeof(TPointMN)) ?
Да, понимаете правильно. Страшно не то что они есть. Будет записываться и с ними. Просто при чтении ссылка будет указывать в никуда.

Цитата:
И как я понимаю получится множество файлов с отдельными элементами массива? Или их всех можно в единый файл затромбовать? А как их потом разделять при чтении?
нет, все пишется в один поток. Известен размер записи.

Write(r[1], sizeof(TPointMN))
Write(r[2], sizeof(TPointMN))

и также чтение:

Read(r[1], sizeof(TPointMN))
Read(r[2], sizeof(TPointMN))

Никогда не использовали TFileStream ? Используйте то, к чему привыкли.
Assign/Rewrite/WriteBlock - суть не изменится.
alexBlack вне форума Ответить с цитированием
Старый 02.10.2008, 18:22   #17
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ужас. Теория такова: вначале файла пишется таблица.. записи ваших данных верхнего уровня... а так же в заголовке указывается смещение на первую запись и сколько таких записей в данном блоке ( верхний уровень записей ). Для каждой записи, если число или фиксированая длинна строки к примеру array[0..1] of char то пишем сразу, если длина не фиксирована пишем так слово для хранения длины строки и смещение ( ну обычно я делаю записи строк в конце файла ) на строку уже определенной длины. И так далее.... таким образом если данная запись хранит в себе другую то в ней пишем смещение на внутриние записи и их кол-во... переходим и опять в рекурсивном записывании файла )) проходим те же этапы.... и так можно до бессконечности... Я обычно делаю переменную типа текущее смещение на строку к примеру... и когда записуется новая строка присваиваю текущую переменную ( как смещение ) и увеличиваю на длину записанной строки..

врятли конечно вы тут что-то поймете сделал вывод из выше стоящих постов ....
BOBAH13 вне форума Ответить с цитированием
Старый 02.10.2008, 18:32   #18
_Инженер_
Пользователь
 
Регистрация: 19.06.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Ужас. ....
Ну отчего же? Поди Вы сразу такой умный из роддома выписались?
_Инженер_ вне форума Ответить с цитированием
Старый 02.10.2008, 18:36   #19
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Нет разумеется. Поэтому и отвечаю. Я бы так сделал как описал.
BOBAH13 вне форума Ответить с цитированием
Старый 02.10.2008, 18:42   #20
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

а БД не пробовали

таблицв1 . данные об узле электро
таблица2 данные об узле нефть
таблица3 данные об узле ...
таблица 4 id узла электро1 id соседа слева
id узла электро1 id соседа справа
id узла электро1 id соседа сверху
id узла электро2 id соседа справа
id узла электро3 id соседа сверху
ну и так далее

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

Последний раз редактировалось evg_m; 02.10.2008 в 18:46.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка и сохранение в файл rainbow Общие вопросы Delphi 16 27.09.2008 11:35
сохранение структуры (динамические списки очередей) в файле AlenaZ Помощь студентам 2 09.06.2008 20:14
Сохранение в файл Македонский Общие вопросы Delphi 4 05.09.2007 15:04
Сохранение ListView в файл Scorpeon Общие вопросы Delphi 6 12.06.2007 15:51
Сохранение в файл *.*С Noor Общие вопросы C/C++ 6 08.01.2007 22:44