Hello all. I read information from a file and then I convert the times read in based on am/pm to 24 hour times. After that I am trying to sort the list based on time in ascending order. That is where the sort() comes in however I am not making any headway.
The file that I am reading from looks something like
"
TimeStamp: 1:00PM
Source : ADM51-28
TimeStamp: 11:00AM
Source : ADM51-28
TimeStamp: 10:59PM
Source : ADM51-28
TimeStamp: 11:58PM
Source : Internet Explorer
"
Any suggestions on correctings this sort function will be greatly appreciated. Thanks alot!
Code:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
typedef struct Node
{
fpos_t begin;
fpos_t end;
int t_hour;
int t_mins;
char t_meri[3];
Node *next;
}Location;
Location *top , *ptr , *last;
void allmem();
void convtm();
void sort();
int main()
{
clrscr();
allmem();
convtm();
sort();
getch();
return 0;
}
void sort()
{
Location *j;
Location hold;
ptr = top;
while(ptr != NULL)
{
j = ptr->next;
while(j != NULL)
{
if(j->t_hour < ptr->t_hour)
{
hold = *ptr;
*ptr = *j;
*j = hold;
}
j = j->next;
}
ptr = ptr->next;
}
ptr = top;
while(ptr != NULL)
{
printf("%.2d:%.2d\n" , ptr->t_hour , ptr->t_mins , ptr->t_meri);
ptr = ptr->next;
}
}
void convtm()
{
ptr = top;
while(ptr != NULL)
{
if(strcmp(ptr->t_meri , "AM") == 0)
{
if(ptr->t_hour == 12)
ptr->t_hour = 0;
}
else
{
if(ptr->t_hour == 12)
ptr->t_hour = 12;
else
ptr->t_hour += 12;
}
ptr = ptr->next;
}
}
void allmem()
{
FILE *read;
char str[20];
int beginend = 2;
read = fopen("spool.dat" , "r");
top = NULL;
while(feof(read) == 0)
{
fscanf(read , "%s" , str);
if((strcmp(str , "TimeStamp:") == 0))
{
if(beginend % 2 == 0)
{
ptr = (Location *)malloc(sizeof(Location));
fscanf(read , "%d:%d%s" , &ptr->t_hour , &ptr->t_mins , ptr->t_meri);
fgetpos(read , &ptr->begin);
ptr->next = NULL;
beginend++;
if(top == NULL)
{
top = ptr;
last = ptr;
}
else
{
last->next = ptr;
last = ptr;
}
}
else
{
fseek(read , -14 , SEEK_CUR);
fgetpos(read , &ptr->end);
beginend++;
}
}
}
fclose(read);
}