LinuxForum.Fans
Тема

Чтение формата

Автор: flyshoot 6 сообщений 2053 просмотров
#209203

Доброго времени суток! Так сложилось, что в моей рабочей области нет или практически нет свободного программного обеспечения. А так как я изучаю программирование как хобби, решил в качестве обучающей задачи взять создание программы для чтения файлов определённого формата и выводить их в другом формате (в дальнейшем, конечно, хочу добавить и другие функции). Хочу попросить уважаемое сообщество подсказать мне, что можно почитать по данной теме, т.к. те немногие книги, что прочёл я, не содержали никаких рекомендаций в данном направлении.

Заранее спасибо всем, кто серьёзно подошёл к составлению ответа.

#209308

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

#209310

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

ЗЫ: какие хоть файлы, текстовые или бинарные?

#209355

Если я правильно понимаю терминологию, то бинарные, а именно меня интересуют форматы SEG-D и SEG-Y. Прочёл книгу Дейтелов "Как программировать на С. Введение в С++", Б. Страуструп "Язык программирования С++. Специальное издание." и там, и там работа с бинарными фалами описана весьма скупо. Создал эту тему в надежде, что есть наработанные пути решения этих проблем, неизвестные мне в силу моих скромных знаний. Использование структур или, скажем, bitset'ов приходило мне на ум. Но я всегда стараюсь изучить проблему на вопрос граблей уже известных, чтобы не терять время. Увы гугл ничего мне не дал, а может забивал что-то не то в поиск. В любом случае, буду очень рад видеть ваши советы.

P.S. описание, например SEG-D, занимает более 170 страниц.

#209367

Так а чего там особо расписывать?
Вы как записать в/считать из файла знаете?
Единственная запинка которая здесь у вас может выйти: есть такое понятие как выравнивание. Т.е. при записи структуры имеющей int и char у вас может оказаться записанным 2*sizeof(int) байт.

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

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

Таким образом у вас есть две задачи:
1. Работа с бинарным файлом. Считать/записать определенный тип/структуру. Если у вас с этим проблема - показывайте на простых типах, что не получается Иначе здесь придется статью для вас подробную писать.

2. Разобраться со структурой файлов. Это уже следующая задача.

#209368

Да в общем ничего в этом хитрого нет...
для си надо просто пользоваться функциями fread/fwrite их описание есть, например, в манах... ЕМНИП даже не обязательно открывать файл с "rb", хотя правильнее всё же с ним...
для плюсов надо открыть файл c ios::binary(хотя на линуксе разницы не почувствуете=)) и читать с istream::get определённое количество байт.
описание и пример с fwrite на [code=http://www.cplusplus.com/reference/clibrary/cstdio/fread/]cpluspluc.com[/code]
там же можно посмотреть и описание функций...

ЗЫ: вполне возможно, что существуют открытые библиотеки для этих форматов...

Войдите или зарегистрируйтесь, чтобы ответить.