Доброго времени суток! Так сложилось, что в моей рабочей области нет или практически нет свободного программного обеспечения. А так как я изучаю программирование как хобби, решил в качестве обучающей задачи взять создание программы для чтения файлов определённого формата и выводить их в другом формате (в дальнейшем, конечно, хочу добавить и другие функции). Хочу попросить уважаемое сообщество подсказать мне, что можно почитать по данной теме, т.к. те немногие книги, что прочёл я, не содержали никаких рекомендаций в данном направлении.
Заранее спасибо всем, кто серьёзно подошёл к составлению ответа.
Чтение формата
Если делать в лоб, то зная формат файла, пишешь Си структуры и рассовываешь определённые куски данных из файла по этим структурам и далее делаешь с ними, что хочешь.
Вместо C можешь взять любой другой ЯП.
чтение/запись в/из файл(а) описывается в любой книжке для начинающих по вашему любимому языку программирования. если вам не хватает стандартнх функций, то описывайте почему или что именно не получается с их помощью реализовать...
ЗЫ: какие хоть файлы, текстовые или бинарные?
Если я правильно понимаю терминологию, то бинарные, а именно меня интересуют форматы SEG-D и SEG-Y. Прочёл книгу Дейтелов "Как программировать на С. Введение в С++", Б. Страуструп "Язык программирования С++. Специальное издание." и там, и там работа с бинарными фалами описана весьма скупо. Создал эту тему в надежде, что есть наработанные пути решения этих проблем, неизвестные мне в силу моих скромных знаний. Использование структур или, скажем, bitset'ов приходило мне на ум. Но я всегда стараюсь изучить проблему на вопрос граблей уже известных, чтобы не терять время. Увы гугл ничего мне не дал, а может забивал что-то не то в поиск. В любом случае, буду очень рад видеть ваши советы.
P.S. описание, например SEG-D, занимает более 170 страниц.
Так а чего там особо расписывать?
Вы как записать в/считать из файла знаете?
Единственная запинка которая здесь у вас может выйти: есть такое понятие как выравнивание. Т.е. при записи структуры имеющей int и char у вас может оказаться записанным 2*sizeof(int) байт.
Основная пробема в задаче понять суть формата. В общем случае считываете заголовок в котором хранится некая важная информация о структур файла, анализируете ее, и двигаетесь дальше на основе этой информации и т.д. пока не считаете весь файл.
В зависимости от формата и конкретной задачи. Можно считывать и сразу записывать в новый формат, или сначала загрузить все в память, а потом уже преобразовать и скинуть в новый файл.
Таким образом у вас есть две задачи:
1. Работа с бинарным файлом. Считать/записать определенный тип/структуру. Если у вас с этим проблема - показывайте на простых типах, что не получается Иначе здесь придется статью для вас подробную писать.
2. Разобраться со структурой файлов. Это уже следующая задача.
Да в общем ничего в этом хитрого нет...
для си надо просто пользоваться функциями fread/fwrite их описание есть, например, в манах... ЕМНИП даже не обязательно открывать файл с "rb", хотя правильнее всё же с ним...
для плюсов надо открыть файл c ios::binary(хотя на линуксе разницы не почувствуете=)) и читать с istream::get определённое количество байт.
описание и пример с fwrite на [code=http://www.cplusplus.com/reference/clibrary/cstdio/fread/]cpluspluc.com[/code]
там же можно посмотреть и описание функций...
ЗЫ: вполне возможно, что существуют открытые библиотеки для этих форматов...