Как извлечь данные из dbf файла в массив на C?

Пользователь

от akeem , в категории: C/C++ , 7 месяцев назад

Как извлечь данные из dbf файла в массив на C?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от magdalen_kub , 7 месяцев назад

@akeem 

Для того чтобы извлечь данные из DBF файла в массив на C, можно использовать следующий алгоритм:

  1. Открыть DBF файл с помощью функции fopen().
1
2
3
4
5
FILE* fp = fopen("file.dbf", "rb");
if (fp == NULL) {
    perror("Error opening file");
    exit(1);
}


  1. Считать заголовок DBF файла, который содержит информацию о структуре таблицы, с помощью функции fread().
1
2
unsigned char header[32];
fread(header, sizeof(unsigned char), 32, fp);


  1. Вычислить количество записей в таблице.
1
int num_records = ((int)header[4]) + ((int)header[5] << 8) + ((int)header[6] << 16) + ((int)header[7] << 24);


  1. Вычислить количество полей в таблице.
1
int num_fields = (int)((header[8] + header[9] * 256) / 32);


  1. Создать массив структур для хранения данных из таблицы.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
struct Record {
    char field1[11];
    char field2[11];
    // ...
};

struct Record* records = (struct Record*)malloc(num_records * sizeof(struct Record));
if (records == NULL) {
    perror("Error allocating memory");
    exit(1);
}


  1. Считать данные из таблицы с помощью функции fread().
1
2
3
4
5
for (int i = 0; i < num_records; i++) {
    fread(&records[i].field1, sizeof(char), 11, fp);
    fread(&records[i].field2, sizeof(char), 11, fp);
    // ...
}


  1. Закрыть файл и освободить память.
1
2
fclose(fp);
free(records);


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