Сортировка базы данных (структуры) - C (СИ)
Формулировка задачи:
Здравствуйте, можете помочь с сортировкой базы данных, если кто знает, как можно реализовать, или просто пример, на основе чего можно сделать, пришлите, пожалуйста, сюда
Решение задачи: «Сортировка базы данных (структуры)»
textual
Листинг программы
void Swap (str *a, str *b)
{
str temp = *a;
*a = *b;
*b = temp;
}
int sort(char *name)
{
FILE*f;
str **a;
int n;
int i, j;
if ((f = fopen(name, "r+"))== NULL)
{
printf("Error %s\n", name);
return 1;
}
n = filelength(fileno(f))/ sizeof(str);
a = (str**)malloc(n * sizeof(str*));
while(!feof)
{
fread(&a, sizeof(str), n, f);
if(!feof(f))
{
for(i = 0; i < n - 1; i++)
for(j = i + 1; j < n; j++)
if(strcmp(a[i]->name_tov, a[j]->name_tov) > 0)
{
Swap(a[i],a[j]);
}
}
}
rewind(f);
fwrite(&a, sizeof(str), n, f);
fclose(f);
free(a);
return 0;
}
Объяснение кода листинга программы
- В функции
Swapпроисходит обмен значениями между двумя указателями на структуруstr. - В функции
sortоткрывается файл с базой данных для чтения и записи, определяется длина файла и выделяется память под массив указателей на структурыstr. - В цикле
whileпроисходит чтение базы данных из файла в массивa. - В цикле
forпроисходит сортировка массиваaпо полюname_tovструктурstrметодом выбором. - После сортировки база данных записывается обратно в файл.
- Функция возвращает 0, если файл успешно закрыт и освобожден, иначе возвращается 1.