LINUX.ORG.RU

Хранение структуры типа record в файле

 ,


0

2

Имеем динамически создаваемые, одинаковые формы, но с разным контентом. Имеем array of Record, в которую помимо ограниченных размерами типов, входит TStrings, с неизвестным количеством строк.
Вопрос:
Как это проще и эффективнее реализовать в одном файле? Просто сомневаюсь, что F: File of MyRecord будет работать, по причине того-же TStrings.
Lazarus, но вопрос актуален и в других IDE.
Раньше я делал тупо текстовый файл, потом его парсил в процессе. Но всё равно не покидало чувство, что делаю я это как-то через жопу.
БД - смысла нет, слишком мал обьём данных.
Может, есть более «красивый» способ?

★★

Последнее исправление: cadaber (всего исправлений: 1)

вопрос ни о чем. база данных тебе обеспечивает запись, чтение, удаление, модификацию, монопольный доступ, возможно транзакции…

а у тебя - как реализовать в файле. а то, как реализовать в файле, зависит от требуемого функционала работы с этим всем.

alysnix ★★★
()

реализовать в одном файле?

Зачем нужен именно один файл. Чем не устраивает директория с одним файлом на форму?

Если волнует место, то используй файловую систему, которая позволяет архивировать (т.е. директорию на архив смонтируй).

Shushundr ★★★
()
Ответ на: комментарий от Shushundr

Зачем нужен именно один файл. Чем не устраивает директория с одним файлом на форму?

В этом-то собственно и вопрос. Сделать отдельный файл на каждую - не проблема, но. Потом надо будет в любом случае задействовать ФС - поиск файлов, чтение и запись каждого по отдельности... По сути, тот-же гемор, только в профиль. Ограничить количество создаваемых форм, разве что.

Чисто визуальную часть я реализовал, создать кучу потомков TForm без .dfm никак, создал одну в IDE, а потом отключил создание в проекте. Потом создавал динамически. Причём, хотя свойства и события у каждого экземпляра получились разные, обрабатывать их по индексу получилось. А вот про сохранение - пока думу думаю...

https://ibb.co/Vmzv350
Вот как-то так. Заголовки форм пока в процессе, потом не будет.

cadaber ★★
() автор топика
Последнее исправление: cadaber (всего исправлений: 4)

Мозги не делай, используй SQLite.

Для TStrings в записи используй MessagePack:
https://github.com/ik5/fp-msgpack
https://github.com/ymofen/msgpack-delphi

Либо CBOR:
https://github.com/mikerabat/DelphiCBOR

Хранить в поле BLOB.

Novator ★★★★★
()
Последнее исправление: Novator (всего исправлений: 1)