@akeem
Для того чтобы извлечь данные из DBF файла в массив на C, можно использовать следующий алгоритм:
- Открыть DBF файл с помощью функции fopen().
1
2
3
4
5
|
FILE* fp = fopen("file.dbf", "rb");
if (fp == NULL) {
perror("Error opening file");
exit(1);
}
|
- Считать заголовок DBF файла, который содержит информацию о структуре таблицы, с помощью функции fread().
1
2
|
unsigned char header[32];
fread(header, sizeof(unsigned char), 32, fp);
|
- Вычислить количество записей в таблице.
1
|
int num_records = ((int)header[4]) + ((int)header[5] << 8) + ((int)header[6] << 16) + ((int)header[7] << 24);
|
- Вычислить количество полей в таблице.
1
|
int num_fields = (int)((header[8] + header[9] * 256) / 32);
|
- Создать массив структур для хранения данных из таблицы.
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);
}
|
- Считать данные из таблицы с помощью функции 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
2
|
fclose(fp);
free(records);
|
Обратите внимание, что этот алгоритм предполагает, что DBF файл имеет фиксированный формат и содержит только поля типа char с фиксированной длиной. Если в таблице есть поля других типов, то для их считывания нужно использовать соответствующие функции чтения.