![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| AndreyANM |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.1.2006 Репутация: нет Всего: нет |
Можно ли создать типизированный файл, в котором
будут храниться переменные типа TStrings (а точнее записи содержащие такие переменные)? Я думаю, что нет, но компилятор при определении такого файла никакой ошибки не выдает. Type Rec= Record A,B,C:Integer; S:TStrings; End; Var F:File of rec; Будет ли такой файл действительно содержать строки TStrings (S)? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет, не будет.
Вместо него полцчишь красивые 4 байта, которые при последующей загрузке будут выдвать Access Violation. |
|||
|
||||
| AndreyANM |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.1.2006 Репутация: нет Всего: нет |
Как же можно выкрутиться в таком случае? Пока - что я использую в файле вместо TStrings массив строк (array [1..10] of string[255] - мне этого достаточно). Но это не совсем рационально. Может есть еще какие - нибудь способы хранить в файле текст и дополнительные переменные? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
XML
|
|||
|
||||
| ShadeSt |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
У TStrings есть методы SaveToFile и LoadFromFile.
Можно упростить (или усложнить) структуру. Вобщем сделать так что первые три строки в файле - это будут переменные A, B,C, а дальше будут идти необходимые строки. Программно можно пропускать эти первые три строки и работать с остальным содержимым, либо же выполнив LoadFromFile выбрать первые три строки и присвоить их значение переменным A,B,C
Таким образом в TS останется только необходимый текст. Либо же как сказал Snowy можно использовать XML, только на мой взгляд немного сложнее будет. Добавлено @ 16:57 Вот примерно так:
Только в файлике должно быть не менее 3х строк. Только, наверное лучше будет сделать класс, вместо записи, у котороко в конструкторе инициализировать TStrings, а также у него же сделать методы загрузки данных и сохранения данных и уже потом работать с этим объектом. -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
||||
|
|||||
| Guedda |
|
||||||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Создать типизированный бинарный файл и работать с ним, типа:
Пишешь:
Читаешь:
-------------------- Ll 2 |
||||||
|
|||||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Вот, недавно нашел статью на винте, так что держи... Что то подобное, только пихать в файл не строки, а картинки. Думаю, разберешься:
Попробую сформулировать своё видение твоей задачи. ЗАДАЧА Цитата: Мне нужно сделать, чтобы картинки сохранялись в один файл, и по требованию пользователя загружались из этого файла (например в память). И считывая картинки из памяти программа показывает их в TImage по порядку с заданным интервалом. Короче программа-слайдшоу. ОБЩИЙ ПЛАН Придумываем свой формат файла (бинарный естественно). - Изображения ложатся в файл друг за другом. Считываются так же. - При чтении нужно знать, сколько занимает считываемая картинка. Варианты: а) писать перед каждой картинкой её размер (одно целое число); б) записать вначале список, содержащий размеры всех картинок, возможно, их смещения в файле. Первый способ самый простой и понятный. Но второй более универсальный. Он даёт возможность хранить список имеющихся изображений, возможность произвольного доступа к любой из них. Для начинающих лучше было бы избрать первый вариант. Но я тут предпочту второй. Не люблю тупиковых направлений. - Обычно в бинарных форматах, в самом начале, помещают заголовок файла. Сделаем и мы его. Запишем туда какую-то сигнатуру (чтобы проверять, что файл «свой») и количество изображений. Можно зарезервировать немного места для каких-то будущих расширений формата, например, добавление картинок без перезаписи файла. ФОРМАТ ФАЙЛА Файл состоит из следующих частей, расположенных друг за гругом
Ну вот, вроде бы и всё. Надеюсь, что этого будет достаточно, чтобы ты разобрался и написал работающий код. Все фрагменты кода писались «с ума», т.е. могут содержать описки, ошибки. -------------------- Ll 2 |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
а еще можно создать (не)типизированный бинарный файл и писать через TFileStream. Перед каждым обьектом записывать его размер. А перед каждым размером писать какой-нибудь идентификатор, по которому при загрузке можно будет определить, что за обьект надо считать.
По такому принципу сделано сохранение/загрузка дерева в Virtual Treeview. Очень удобно, если есть разветвлённая иерархия классов(обьектов). Основную процедуру сохранения можно реализовать в базовом классе, Переопределяя этот метод в наследниках, можно усложнять структуру данных не меняя структуры файла. |
|||
|
||||
| AndreyANM |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.1.2006 Репутация: нет Всего: нет |
Всем спасибо, буду разбираться...
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |