Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Формат файла.   Найти похожие ветки 

 
guav ©   (2006-10-03 18:31) [0]

Требуется изобрести формат файла.
в файл должна войти большая BMP картинка и немного других данных (в основном, массивы координат из пар Double).

Самый ленивый способ - хранить другие данные в формате dfm, картинку писать перед или после этого dfm или как ещё одно свойство этого dfm. Но мне это решение не очень нравится, т.к. оно привязано к VCL.
Данные можно записать в текстовой форме (XML) или бинарной. Вопрос также какой лучше взять общий "контейнер" для двух сущностей "картинка" или "другие данные". Просто писать подряд ? Zip ? Файл ресурсов ?

В общем, вопрос, если бы вам потом пришлось работать с моими данными с каким бы форматом вы бы были менее огорчены столкнуться ?


 
MeF Dei Corvi ©   (2006-10-03 18:34) [1]

Не вижу проблемы. Требуется изобрести - сделай. Судя по тому, что там будет картинка, формат будет бинарный.


 
TUser ©   (2006-10-03 18:34) [2]

У тебя нет ограничений - выбирай любой способ, лишь бы работало. Имхо.


 
Kolan ©   (2006-10-03 18:36) [3]

Может *.doc?


 
Gero ©   (2006-10-03 18:41) [4]

Просто записать подряд в бинарный файл. Зачем еще xml приплетать?


 
guav ©   (2006-10-03 18:41) [5]

> У тебя нет ограничений - выбирай любой способ, лишь бы работало.
> Имхо.

Я понимаю.
Но вот такой формат предыдущей проги.

// формат файла старой программы выявлен опытным путём.
// это - массив записей, по записи на каждую точку,
// последняя запись дублируется. Запись слеующего вида:
type
 TObjRecord = packed record
   PtName: array[0..15] of Char;
   GeoX, GeoY: Double;
   Junk: array[0..7] of Byte;
 end;
// , где PtName - подпись, лишние элементы - пробелы.
// GeoX, GeoY - координата.
// Junk - заполняется иногда "мусором",
// иногда нулями, при открытии файла в Pmag1.exe
// видимо игнорируется, при сохранении пишет
// в элементы 0..3 нули, в 4..7 - что-то очень
// похожее на указатель.


Оказался неудобным и заставил долго экспериментировать с ней, чтобы его выяснить.

Не хочу повторять ошибок.


 
Virgo_Style ©   (2006-10-03 18:42) [6]

вероятно, в лоб - <допольнительные данные><поток>.
поток - bmp или jpg. Если допустим jpg - то посмотрел бы в сторону тэгов, или как из у jpeg"а зовут - нельзя ли там создать свой собственный служебный массив.


 
Ученик чародея.   (2006-10-03 18:44) [7]


> guav ©   (03.10.06 18:31)  
> Требуется изобрести формат файла.
> в файл должна войти большая BMP картинка и немного других
> данных (в основном, массивы координат из пар Double).
>
> Самый ленивый способ - хранить другие данные в формате dfm,
>  картинку писать перед или после этого dfm или как ещё одно
> свойство этого dfm. Но мне это решение не очень нравится,
>  т.к. оно привязано к VCL.
> Данные можно записать в текстовой форме (XML) или бинарной.
>  Вопрос также какой лучше взять общий "контейнер" для двух
> сущностей "картинка" или "другие данные". Просто писать
> подряд ? Zip ? Файл ресурсов ?


Zip и тематические подкаталоги внутри. Возможно в корне zip xml файл с описанием.

Abbrevia(Delphi компонент) работает с zip.


 
Gero ©   (2006-10-03 18:44) [8]

Формат достаточно документировать, и ничего выяснять не надо будет.


 
MeF Dei Corvi ©   (2006-10-03 18:44) [9]


> чтобы его выяснить.

Что значит выяснить формат, если он жетко задан тобой же?


 
Ученик чародея.   (2006-10-03 18:44) [10]

В общем так почти все файлы ресурсов игрушек сделаны. расширение файла конечно лучше свое придумать.


 
Gero ©   (2006-10-03 18:45) [11]

> [7] Ученик чародея.   (03.10.06 18:44)

Зачем такой огород городить?


 
guav ©   (2006-10-03 18:45) [12]

> [4] Gero ©   (03.10.06 18:41)


> Просто записать подряд в бинарный файл. Зачем еще xml приплетать?


Это просто для одной версии, но неудобно если в программе периодически появляются абсолютно новые сущности.

С xml парсером работать несложно, а данных немного, почему бы не приплести ?


 
MeF Dei Corvi ©   (2006-10-03 18:47) [13]


> С xml парсером работать несложно

С потоками ввода работать сложнее?


 
guav ©   (2006-10-03 18:48) [14]

> Что значит выяснить формат, если он жетко задан тобой же?


Новый - да.
Старый - связан со старыми программами для которых и автор и исходники утеряны, воти пришлось ковырять.


 
Virgo_Style ©   (2006-10-03 18:49) [15]

guav ©   (03.10.06 18:45) [12]
Это просто для одной версии, но неудобно если в программе периодически появляются абсолютно новые сущности.


Если так, то что-то вроде
<Имя блока><размер><содержимое блока>
<Имя блока><размер><содержимое блока>
<Имя блока><размер><содержимое блока>

imho.


 
Kolan ©   (2006-10-03 18:50) [16]

Мое имхо - только популярные форматы, если это возможно.


 
guav ©   (2006-10-03 18:50) [17]

> Zip и тематические подкаталоги внутри. Возможно в корне
> zip xml файл с описанием.

Идея эта мне нравится. Без тематических каталогов можно обойтись, т.к. всего две сущности - картинка и другие данные. Но останавливает это:

> Зачем такой огород городить?


 
ferr ©   (2006-10-03 18:52) [18]

я бы пользовал xml, и только.


 
guav ©   (2006-10-03 18:53) [19]

> [16] Kolan ©   (03.10.06 18:50)


> Мое имхо - только популярные форматы, если это возможно.

что значит "только популярные форматы" ?
данные - специфичные для программы.
форма представления - об этом и вопрос.


 
guav ©   (2006-10-03 18:54) [20]

> я бы пользовал xml, и только.

Нужно хранить ещё и BMP. Или предлагаешь её тоже в xml ?


 
Gero ©   (2006-10-03 18:57) [21]

> [20] guav ©   (03.10.06 18:54)

Конечно можно.


 
ferr ©   (2006-10-03 18:58) [22]

> Нужно хранить ещё и BMP.

это уже хуже)
> Или предлагаешь её тоже в xml ?

зависит от размеров BMP.


 
Kolan ©   (2006-10-03 18:59) [23]


> "только популярные форматы" ?

Можешь сделать на Xml, который знаешь ты и еще тысячи людей, сделай. А своё изобретать - рыть себе яму в будующем.

Пример: попросили открыть файл вида:

1200
2015
1232
5443
-5433
-4552
2456


Что это за числа? Какие сдесь данные?

Точки в виде:
X
Y

Или:
X
Y
Z

Вот что такое "изобретенный" формат.


 
guav ©   (2006-10-03 19:01) [24]

> Конечно можно.

Ну да. Но, опять таки, нужно ли ?
Вот ты предлагаешь ни xml ни dfm а воообще бинарные данные подряд. Этот подход имеет свои преимущества.

Меня интересуют различные мнения. Можете считать это опросом.


 
guav ©   (2006-10-03 19:03) [25]

> [23] Kolan ©   (03.10.06 18:59)

Вот... я тоже с таким столкнулся.. в общем ты меня понял.
Собственно это и побудило создать ветку, а не делать как в данный момент на ум пришло.


 
Agent13 ©   (2006-10-03 19:07) [26]

Кстати, по поводу зип-архива - по этому пути пошёл даже Microsoft. Ведь  файлы, созданные Microsoft Office 2007 - docx, xlsx, pptx и т.д. представляют собой не что иное как зип-архив, в котором сожержится несколько xml-файлов. Так что есть на кого равняться :)


 
Джо-со-смарта   (2006-10-03 19:07) [27]

Я бы выбрал 2 файла, картинка и данные - отдельно. Данные - в текстовом виде. Собственно, у меня таких "форматов" несколько, используются пару лет. Недостатков не обнаружил :-)


 
ferr ©   (2006-10-03 19:09) [28]

> от... я тоже с таким столкнулся.. в общем ты меня понял.

После того как пару раз приходилось незапланированно масштабировать данные, почти все данные теперь у меня хранятся в xml).
> Ведь  файлы, созданные Microsoft Office 2007 - docx, xlsx,
> pptx и т.д. представляют собой не что иное как зип-архив,
> в котором сожержится несколько xml-файлов

Мамма мия) Они всегда найдут как сделать тоже самое в разы медленнее...


 
Oldman ©   (2006-10-03 19:14) [29]


> Требуется изобрести формат файла.
> в файл должна войти большая BMP картинка и немного других
> данных (в основном, массивы координат из пар Double).


БСК!!! Читай [27]


 
guav ©   (2006-10-03 19:14) [30]

> [27] Джо-со-смарта   (03.10.06 19:07)

Тоже вариант. Но желательно одним куском. Дело в том что картинка читается из уже созданного BMP файла и никогда не редактируется. Но чтобы не потерять её, лучше запихнуть в файл.


> [26] Agent13 ©   (03.10.06 19:07)

И картинки, и объекты тоже, получается, в XML пихают ?
Если не трудно, пришли пожалуйста небольшой  образец на Format("%s@%s.%s", ["guav", "ukr", "net"])


 
Джо-со-смарта   (2006-10-03 19:17) [31]

Удобно,, например, тем, что картинку можно обрабатывать отдельно, любым другим софтом.


 
guav ©   (2006-10-03 19:24) [32]

> > Или предлагаешь её тоже в xml ?
>
> зависит от размеров BMP.

От сотен кил до нескольких мег.


> Удобно,, например, тем, что картинку можно обрабатывать
> отдельно, любым другим софтом.

Картинка уже есть отдельно и с ней ничего делать не надо.

Как бы результаты опроса:

данные:
текст            Джо, Oldman
xml              Kolan, Ученик чародея, ferr, Agent13
бинарник         MeF Dei Corvi, Gero, Virgo_Style
dfm
всё равно        TUser

котнейнер:
zip             Ученик чародея, Agent13
просто подряд   Gero, Virgo_Style
отдельно!       Джо, Oldman


 
Ученик чародея.   (2006-10-03 19:26) [33]


> guav ©   (03.10.06 18:50) [17]
> > Zip и тематические подкаталоги внутри. Возможно в корне
>
> > zip xml файл с описанием.
>
> Идея эта мне нравится. Без тематических каталогов можно
> обойтись, т.к. всего две сущности - картинка и другие данные.
>  Но останавливает это:
>
> > Зачем такой огород городить?


Тем что на Delphi это сделать проще, чем нарисовать иконку к своей программе, на иконку уйдет времени больше.

Так сделаны пакеты Jar - java программы.


 
MeF Dei Corvi ©   (2006-10-03 19:30) [34]


> бинарник         MeF Dei Corvi

Ну вообще я за картинку отдельно, данные отдельно. Так редактировать удобнее (данные в xml). При желании можно и в zip упаковать. В зависимости от задачи.


 
Ломброзо ©   (2006-10-03 19:31) [35]

Покурите про медицинский стандарт DICOM - он как раз и разработан для хранения растровых изображений с координатами для выделения и подписывания каких-то областей


 
ferr ©   (2006-10-03 19:32) [36]

Всё-таки я против того чтобы в xml толкать картинку. Она всё же слишком большая, будут очень ощутимые тормоза..
Моё мнение такое :
zip
{
 image(s);
 ...
 mainXML; // в нём название файла и другая координационная информация(если необходима)
}


 
guav ©   (2006-10-03 19:40) [37]

> Тем что на Delphi это сделать проще, чем нарисовать иконку
> к своей программе, на иконку уйдет времени больше.

Иконка уже есть :-)
А расширение всё равно своё будет

Я не про сложность реалиации, а про сложность самой программы.


> [35] Ломброзо ©   (03.10.06 19:31)

Очень интересно, спасибо, покурю.


 
Kerk ©   (2006-10-03 19:40) [38]

Я за zip
Вообще можно было б написать класс - аналог TIniFile, но работающий с zip-хранилищем


 
Agent13 ©   (2006-10-03 19:44) [39]


> И картинки, и объекты тоже, получается, в XML пихают ?
> Если не трудно, пришли пожалуйста небольшой  образец на
> Format("%s@%s.%s", ["guav", "ukr", "net"])

Отослал. Но картинки они в xml не пихают :) Они лежат в нормальном виде в подкаталоге media. Объекты - в embeddings. Так что судя по всему в xml  только текст и настройки.


 
VEG ©   (2006-10-03 19:57) [40]

AbiWord имеет свой формат документа, основанный на XML. Так вот картинки он хранит в самом XML в кодировке base64


 
Yanis ©   (2006-10-03 20:06) [41]

Может кто-то и предлагал...


> guav ©   (03.10.06 18:31)

А может использовать структурированные хранилища? (Structured Storage)


 
Ученик чародея.   (2006-10-03 20:37) [42]


> guav ©   (03.10.06 19:40) [37]
> > Тем что на Delphi это сделать проще, чем нарисовать иконку
>
> > к своей программе, на иконку уйдет времени больше.
>
> Иконка уже есть :-)
> А расширение всё равно своё будет
>
> Я не про сложность реалиации, а про сложность самой программы.


Если сделать через классы с грамотным наследованием, то будет не сложнее чем изменение элемента массива.

PS
В файл формата можно еще пихать description.txt с описанием формата своих данных. Это уже будет ультимативная открытость формата :)

PS2
А я вот нечто подобное через ini файл вот делаю.


 
Marser ©   (2006-10-03 21:09) [43]

Ты, часом, не ozf свой писать удумал? :-)


 
TUser ©   (2006-10-03 21:17) [44]

Кстати, встенографировать в bmp свои double не хочешь? Типа, против хакеров. :))


 
wicked ©   (2006-10-03 21:17) [45]

вариантов куча:
1) Structured Storage - плавали, знаем - достаточно неплохо, если не выходить за базовые возможности
2) zip; а лучше - pak - тот же zip, только без сжатия, формат позволяет
3) SQLite - хранить в блобах

сейчас, кстати, я бы выбрал вариант 3 - уж очень много преимуществ имеет :)


 
wl ©   (2006-10-03 21:59) [46]

кпк-шный книжный формат FB2 (Fiction Book 2) тоже хранит картинки (а заодно и форматированный текст) внутри XML-файла.


 
guav ©   (2006-10-03 22:02) [47]

> [35] Ломброзо ©   (03.10.06 19:31)


> Покурите про медицинский стандарт DICOM

Попробовал посмотреть на http://medical.nema.org/dicom/2006/
Возможно он подошел бы, однако, размер описаний впечатляет.
Слишком долго его придётся курить.


> [43] Marser ©   (03.10.06 21:09)

> Ты, часом, не ozf свой писать удумал? :-)


1. Программа уже написана и работает, только сохранения нет.
2. Что такое ozf ?


> [44] TUser ©   (03.10.06 21:17)


> Кстати, встенографировать в bmp свои double не хочешь? Типа,
> против хакеров. :))

нет, такого не надо :)


> [41] Yanis ©   (03.10.06 20:06)


> [45] wicked ©   (03.10.06 21:17)


> Structured Storage


Какие преимущества у этого варианта перед зипом ?


> [45] wicked ©   (03.10.06 21:17)


> 2) zip; а лучше - pak - тот же zip, только без сжатия, формат
> позволяет

попробовал зазиповать тестовые картинки... нет лучше таки зип, бо уж сильно хорошо сжимаются.


 
guav ©   (2006-10-03 22:05) [48]

> [46] wl ©   (03.10.06 21:59)

И OpenOffice тоже, и вообще тендеция.
Сейчас тоже склоняюсь к такому варианту.


 
Ломброзо ©   (2006-10-03 22:13) [49]

guav ©   (03.10.06 22:02) [47]

Google Delphi+DICOM
Результаты 1 - 10 из примерно 80 500 для Delphi DICOM


 
Ломброзо ©   (2006-10-03 22:17) [50]

Хотя, возможно, я что-то путаю. Припоминаю, что в одной знакомой мне радиологической информационной системе координаты каких-то областей лежали таки в БД


 
Слон ©   (2006-10-03 23:57) [51]


> Virgo_Style ©   (03.10.06 18:42) [6]

действительно, если формат графики допускает тэги, то хранить в них все необходимые данные - самый удобный и быстрый вариант.


 
Yanis ©   (2006-10-04 09:54) [52]


> Какие преимущества у этого варианта перед зипом ?

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


 
Marser ©   (2006-10-04 15:49) [53]

> 2. Что такое ozf ?

Про Ozi Explorer слыхал? Это программа для работы с картами, в частности для GPS. Так вот, его формат, ozf это, грубо говоря, то что ты описал.


 
guav ©   (2006-10-05 00:09) [54]

> [50] Ломброзо ©   (03.10.06 22:17)

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

> [51] Слон ©   (03.10.06 23:57)

Изображения уже давно только BMP, поддержку других форматов никто не требовал.
В формате BMP нет специальных полей для комментариев (хотя можо попытаться писать в конце или между заголовками и пикселями).
В любом случае, вариант с тэгами мне не очень нравится. Пусть лучше или каринка отдельно, или не открывается в других программах напрямую.


> [52] Yanis ©   (04.10.06 09:54)

Ничего существенного не вижу:
В зипе тоже система с фалами и даже папками.
Зип тоже не обязательно паковать. Постоянный быстрый доступ к файлу не требуется.
Скорее, отсутствие встроенного в формат сжатия я бы рассматривал как недостаток.
Для зипа существуют библиотеки, в т.ч. с исходниками и не требующие внешних файлов, поэтому отсутствие поддержки на уровне windows не проблема.
Отталкивает от рассмотрения этого варианта то, что MS Office, ранее использовавший Structured Storage , теперь тоже перешел на зип.


> [53] Marser ©   (04.10.06 15:49)

Что-то мне не удалось найти описание формата, потому вопросы:
Ты работал с этим форматом ?
Если да, то:
Он открыт или работа через SDK ? Где посмотреть подробнее ?



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.039 c
15-1160119930
Holy
2006-10-06 11:32
2006.10.29
Школьная информатика


2-1160629003
Unknone
2006-10-12 08:56
2006.10.29
Компонент OpenDialog


2-1161013609
Alex_KV
2006-10-16 19:46
2006.10.29
Про указатели


2-1160709419
Steep
2006-10-13 07:16
2006.10.29
Units Again


2-1160338383
XeRoN
2006-10-09 00:13
2006.10.29
Работа с чужим приложением