I'm trying to create a function that will sort the contents of a file in alphabetical order. The problem I'm having is that the code doesn't seem to do anything. The only examples I could find have to do with arrays which I am not using but I tried to apply the same principle to structs and files. The file I need to sort is a log file and the size of it's contents will be forever increasing. Here's the ineffective code:
NB: Basically I'm trying to display a report sorted alphabetically. If there's a simple way that doesn't involve modifying the file that would be great.
void insertion_sort(int category)
{
FILE *seeker;
int size=0, total=0, runner=0;
int k;
int i;
ADMISSION_DATA small = {NULL,NULL,"","","",0,999,0.00,1,0};
ADMISSION_DATA temp = {NULL,NULL,"","","",0,999,0.00,1,0};
if( (seeker = fopen("guest_history.txt", "rb+")) == NULL )
{
printf("\nGuest history file could not be opened");
_getch();
}
else
{
// counts the number of cancellations in the file
while ( fread( §ion, sizeof (ADMISSION_DATA), 1, seeker ) == 1 )
{
total++;
if( section.cancel == category )
size++;
}
rewind( seeker );
//printf("Count: %d", size); _getch(); size = 0;
while ( fread( §ion, sizeof (ADMISSION_DATA), 1, seeker ) == 1 )
{
if( section.cancel == category )
{
for (k = 1; k < size; k++)
{
// sets the first row as the smallest
//fseek( seeker, ( section.reservation_num - k ) * sizeof( ADMISSION_DATA ), SEEK_SET );
fread( &small, sizeof (ADMISSION_DATA), 1, seeker );
//rewind( seeker );
for(i = k - 1; i>=0 && (strcmp(small.first_name,section.first_name) < 0); i--)
{
//fseek( seeker, ( section.reservation_num - i ) * sizeof( ADMISSION_DATA ), SEEK_SET );
//fread( §ion, sizeof( ADMISSION_DATA ), 1, seeker );
temp = section;
fseek( seeker, ( section.reservation_num ) * sizeof( ADMISSION_DATA ), SEEK_SET );
fwrite( &temp, sizeof( ADMISSION_DATA ), 1, seeker );
}
//fseek( seeker, ( section.reservation_num ) * sizeof( ADMISSION_DATA ), SEEK_SET );
//fread( &small, sizeof( ADMISSION_DATA ), 1, seeker );
temp = small;
fseek( seeker, ( section.reservation_num ) * sizeof( ADMISSION_DATA ), SEEK_SET );
fwrite( &small, sizeof( ADMISSION_DATA ), 1, seeker );
}
}
runner++;
}
}
fclose( seeker );
//printf("RUN %d", runner);
}
I doubt I can use the reservation number to navigate through the files because more than one row can have the same number (1 - 50).