Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиПоискОблакоComboВсе проекты

Кодировка файла DAT

Ирина Гуру (2699), закрыт 1 неделю назад
Здравствуйте!
Имеется файл .DAT, нужно считать из него базу данных своей программой (лаба), считываются естественно каракули. Пытаюсь открыть файл хоть чем-нибудь на просмотр содержимого. Текстовые поля показываются как надо, а вот целочисленные - не меняются. Что можно еще сделать, чтобы обведенное перевести в число?
Лучший ответ
Иван Сигаев Искусственный Интеллект (122633) 1 неделю назад
Определяешь структуру

struct record {
char FIO[20];
uint16_t data1
char date[8];
char data2[20];
} rec;
А потом читаешь ее из файла
fread(&rec,sizeof(record),1,fp);
Сергей НикольскийГуру (4623) 1 неделю назад
если размер структуры переменный, как быть?
Иван Сигаев Искусственный Интеллект (122633) Судя по картинке - постоянный
ИринаГуру (2699) 1 неделю назад
Хотелось для чтения файла использовать методы классов fstream, ifstream. Но считывались каракули несмотря на модификаторы типа ios_base::binary...
Тип FILE применять не хотелось по опыту из-за функции fopen, на которую уже давненько ругается компилятор MVS. Помог #define _CRT_SECURE_NO_WARNINGS, что удивительно, но порадовало.
Что касается целочисленного поля, да, зря не уточняю, что это 16-pазpядное положительное число, т. е. uint16 или unsigned short.
В общем ваш ответ помог.
Остальные ответы
Eternally Against Искусственный Интеллект (238194) 1 неделю назад
Спроси у владельца\автора файла что это за файл и чем его открыть. Так можно долго перебирать бесчисленные варианты (и все-равно не подобрать).
Если можешь скинуть файл - гляну, ничего не обещая.
ИринаГуру (2699) 1 неделю назад
Спасибо за ответ и готовность помочь!
Сергей Никольский Гуру (4623) 1 неделю назад
Файл с расширением .DAT может быть чем угодно, даже видеофайлом. Чтобы правильно прочитать файл БД, нужно знать изначальную структуру БД, размер полей данных и содержимое. При переменном размере полей также могут быть маркеры края поля (разделители). Возможно и сжатие данных с целью уменьшения размера файла данных. То, что Вам удалось прочитать содержимое текстовых полей, которые просто совпали по кодировке не говорит о том что прочитаете и узнаете содержимое остальных. К примеру у вас фиксированная длина поля ФИО, дальше идет еще два байта данных (предположим) далее какая-то дата. Эти данные могут быть номером строки в шестнадцатеричном виде или еще что-либо. Как узнать? нужно знать структуру БД. Ну а потом распилить данные любым скриптом на любом языке не проблема и переформатировать вывод в удобный для чтения вид.
ИринаГуру (2699) 1 неделю назад
Спасибо за подробную консультацию и готовность помочь!
Похожие вопросы