Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2008, 20:49   #1
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
Вопрос Проблема с обработкой DBF файла

Привет. Возникла задача разработать программу, для обработки dbf файлов. Решил не использовать сторонние драйверы, вроде BDE, а написать свои функции, для извлечения данных их файла. Ознакомился со структурой файла, вроде бы ничего сложного, начал писать, определил две структуры, для собственно заголовка и полей:
Код:
struct Header
{
	char id;
	char datemod[3];
	long reccount;
	int  headsize;
	int  recsize;
	char reserv[20];
};

struct Fields
{
	char name[11];
	char type;
	long where;
	char length;
	char reserv[15];
};
При попытке чтения данных структур из файла происходит следующее:
поле datemod[3] получает значение вида: 1245017, а должна быть дата, точно так же поле headsize получает аномально большое значение 28836802, в итоге я не могу рассчитать количество полей в таблице. Поле recsize почему то равно нулю. А все остальные поля имеют корректное значение! Тип файл, количество записей, названия полей и т.д.

Собственно для опытов использую вот такой код, сначала читаю заголовок, потом одно поле:
Код:
	Header hdr; Fields fld;
	fread(&hdr,32,1,dbfile);
	printf("%i ",hdr.id);
	printf("%i ",hdr.datemod);
	printf("%i ",hdr.reccount);
	printf("%i ",hdr.headsize);
	printf("%i ",hdr.recsize);
        
        fread(&fld, 32, 1, dbfile);
        printf("\n%s ", fld.name);
        printf("%c", fld.type);
        .........
Собственно не пойму в чем проблема с этими полями структур - датой и количеством полей таблицы, может я как-то некорректно считываю байты из файла?
oleg kutkov вне форума Ответить с цитированием
Старый 22.08.2008, 21:07   #2
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Вообще проблему с рамерами решил, оказывается нужно применять не int, а short:
Код:
struct Header  
{ 
     char id; 
     char datemod[3]; 
     long reccount; 
     short  headsize; 
     short  recsize; 
     char reserv[20]; 
};
Теперь все нормально, только остался вопрос с датой, она по прежнему в таком формате. В принципе она мне не нужна, просто интересно...
oleg kutkov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью большого файла Rembo Свободное общение 17 17.06.2008 12:47
Проблема с созданием файла справки belochka Общие вопросы Delphi 5 05.11.2007 18:24
Помогите с обработкой изображений Dude_first Мультимедиа в Delphi 3 31.08.2007 16:54
Проблема с адресом файла Геля Общие вопросы Delphi 8 20.04.2007 20:48