|
44 / 43 / 7
Регистрация: 18.05.2010
Сообщений: 688
|
|
Сохранения XML в бинарный файл03.12.2013, 17:56. Показов 3878. Ответов 16
Метки нет (Все метки)
Есть XML, работаю с ним через XMLDocument
Всё прекрасно, всё хорошо. Но вот хочу попробовать такой вариант: Сохранить этот самый XML после редактирования в некий бинарный файл. Я знаю, что текстовый документ является частный случаем бинарного. В данном конкретном случае я имею ввиду что-нибудь, что в каком-нибудь блокноте будет выглядеть как нечитаемая вязь. Пробовал записывать и считывать построчно через shortstring, Получается не очень корректно, при считывании есть ошибки в тексте, не хватает символов, появляются лишние пробелы и т.д. Пробовал через WriteBlock/ReadBlock. C записью проблем нет, а вот как потом реализовать считывание корректно, так же не придумал. Буду благодарен за любого рода подсказку.
0
|
|
| 03.12.2013, 17:56 | |
|
Ответы с готовыми решениями:
16
Класс сохранения данных в xml Запись разнообразных данных в бинарный файл (как лучше сделать?) Бинарный файл |
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
| 03.12.2013, 22:41 | |
|
Да просто сожми текстовые данные средствами zlib - вот и будут бинарные.
А перед чтением в xmldocument разожми их теми же средствами zlib - данные станут вновь текстовыми
1
|
|
|
44 / 43 / 7
Регистрация: 18.05.2010
Сообщений: 688
|
|
| 04.12.2013, 10:31 [ТС] | |
|
Вполне приемлемая идея. Благодарю за совет.
Я, правда, дошёл до мысли просто сохранять данные в типизированном файле. Но можно и вовсе совместить)
0
|
|
|
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 04.12.2013, 12:53 | ||||||
|
Можно в Base64 кодировать/декодировать.
![]()
1
|
||||||
|
44 / 43 / 7
Регистрация: 18.05.2010
Сообщений: 688
|
|||||||
| 04.12.2013, 15:24 [ТС] | |||||||
|
Тоже как вариант. А ещё столкнулся сейчас с одной интересной задачей.
Хочу записать всё свой добро в типизированный файл. Описываю тип и понимаю, что у меня беда:
Можно ли как-то обойти это ограничение? может быть использовать массив какой-то типа array of char например и записывать в его элементы данные посимвольно? Предварительно указав размер. Или же можно какой-то иной тип переменной использовать? Добавлено через 7 минут
0
|
|||||||
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
||
| 04.12.2013, 15:27 | ||
|
Типизированный файл априори подразумевает один и тот же фиксированный размер любой записи, а у тебя размеры записей заранее неизвестны. Выход один - сериализация/десериализация объектов-записей.
0
|
||
|
44 / 43 / 7
Регистрация: 18.05.2010
Сообщений: 688
|
||
| 04.12.2013, 15:38 [ТС] | ||
|
Добавлено через 8 минут mss, сейчас немного почитал об этом понятии в целом. Поправьте меня, если я думаю не в том направлении. То есть, я в принципе могу засунуть XMLDocument1, который содержит мою информацию в поток памяти и оттуда записать его в файл, а потом вынуть назад?
0
|
||
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
||
| 04.12.2013, 15:46 | ||
|
Можно и сразу в файловый поток записывать. Собственно содержимое любого xml-файла и есть ничто иное как сериализованый объект.
0
|
||
|
44 / 43 / 7
Регистрация: 18.05.2010
Сообщений: 688
|
|
| 04.12.2013, 16:01 [ТС] | |
|
mss, спасибо, попробую смотреть в этом направлении, но всё таки интересно, неужели никак нельзя организовать собственный тип файла, с изначально неизвестной длинной данных.
Может как-то есть возможность обойти данное ограничение? Или только если указывать максимально возможные размеры, работать с ними, сохранять, оставляя половину, а то и более памяти неиспользованной?
0
|
|
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
| 04.12.2013, 16:10 | |
|
0
|
|
|
44 / 43 / 7
Регистрация: 18.05.2010
Сообщений: 688
|
||
| 04.12.2013, 16:19 [ТС] | ||
|
Я понимаю, что это уже оффтоп, но если не сложно, был бы признателен за информацию по данному вопросу(создание типизированного документа с изначально неизвестной длинной данных).
0
|
||
|
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 04.12.2013, 16:45 | ||||||
|
Файл будет нетипизированным. Как выше в теме уже упоминалось - в него можно записать данные переменной длины. Делать можно через типовой подход - если надо сохранить некоторые данные, то сначала в файл записываем сведения о размере этих данных в байтах (Size : Integer), а потом записываем сами данные. Т. е., например, если надо записать строку, то сначала записываем размер строки (размер - в байтах), а затем записываем текстовые данные строки.
При чтении действуем так. Сначала читаем сведения о размере данных (например - это размер текстовых данных строки), потом выделяем память для данных (для строки), затем, читаем данные из файла и записываем их в выделенную область памяти. Выглядеть это будет так:
1
|
||||||
|
44 / 43 / 7
Регистрация: 18.05.2010
Сообщений: 688
|
|
| 04.12.2013, 17:21 [ТС] | |
|
Mawrat, понял ещё раз, что ещё учиться и учиться.
Так или иначе, благодарю! Всё прекрасно. Правда по началу не поняв зачем в процедурах установлено Name[1] словил ошибку доступа, удалив этот указатель. Но разобравшись, откуда ноги растут, вернул назад и получил всё что нужно.
0
|
|
|
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|||||||
| 04.12.2013, 20:41 | |||||||
![]() Следующая версия кода. Более гибкий подход:
0
|
|||||||
|
Заблокирован
|
||||||
| 04.12.2013, 21:30 | ||||||
2
|
||||||
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
| 04.12.2013, 21:48 | |
Сообщение было отмечено как решение
Решение
Для простейшего случая со св-вами основных типов (к коим относится String) будет еще проще:
TMyStr = class(TComponent) private FStr: String; property Str: String read FStr write FStr; end;
3
|
|
|
44 / 43 / 7
Регистрация: 18.05.2010
Сообщений: 688
|
|
| 05.12.2013, 11:32 [ТС] | |
|
Всем спасибо!
Идею понял. Буду дальше уже думать. Благо понял, в каком направлении.
0
|
|
| 05.12.2013, 11:32 | |
|
Помогаю со студенческими работами здесь
17
Бинарный файл Создать бинарный файл Как записать в бинарный файл Создать бинарный файл записей Бинарный текст в бинарый файл! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|