Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAXSIZE 100
typedef struct dataTuple
{
char name[12];
char server[30];
unsigned int faction;
unsigned int race;
unsigned int class;
unsigned int lvl;
unsigned int guild;
}Tuple;
int compare(const void * p1, const void *p2);
int main(int argc, char *argv[])
{
Tuple *data[7];
FILE *in, *out;
char line[100];
char *tokenPtr;
const char delit[2]=",";
int counter, length, i, j=0,k,count=0;
if(argc != 3)
{
printf("Usage: %s filename\n", argv[0]);
exit(1);
}
if((in = fopen(argv[1], "r"))==NULL)
{
fprintf(stderr,"**>Error opening %s", argv[1]);
}
out = fopen(argv[2], "wb");
while((fgets(line,1000,in)) != NULL)
{
counter = 0;
if((data[j] = (Tuple *)malloc(sizeof(Tuple))))
{
if(data == NULL)
{
printf("Unable to allocate memory!");
exit(1);
}
tokenPtr = strtok(line,delit);
while(tokenPtr != NULL)
{
counter++;
switch(counter)
{
case 1:
strcpy(data[j]->name,tokenPtr);
length = strlen(data[j]->name);
if(length<12)
{
for(i=0;i<12;i++)
{
if(!isalpha(data[j]->name[i]) && data[j]->name[i] != '\'')
{
data[j]->name[i] = '\0';
}
}
}
break;
case 2:
strcpy(data[j]->server,tokenPtr);
length = strlen(data[j]->server);
if(length<30)
{
for(i=0;i<30;i++)
{
if(!isalpha(data[j]->server[i]))
{
data[j]->server[i] = '\0';
}
}
}
break;
case 3:
data[j]->faction = atoi(tokenPtr);
break;
case 4:
data[j]->race = atoi(tokenPtr);
break;
case 5:
data[j]->class = atoi(tokenPtr);
break;
case 6:
data[j]->lvl = atoi(tokenPtr);
break;
case 7:
data[j]->guild = atoi(tokenPtr);
break;
}
tokenPtr = strtok(NULL,delit);
}
j++;
count++;
}
}
for(k=0;k<count;k++)
{
printf("Data : %s\n", data[k]->server);
}
printf("\n");
printf("Count : %d\n", count);
qsort(data,count,sizeof(Tuple),compare);
for(k=0;k<count;k++)
{
/*fwrite(data[k],sizeof(Tuple),1,out);
*/printf("Data : %s\n", data[k]->server);
free(data[k]);
}
fclose(in);
fclose(out);
return 0;
}
int compare(const void * p1, const void * p2)
{
const struct dataTuple *ps1 = p1;
const struct dataTuple *ps2 = p2;
int res;
res = strcmp(ps1->server, ps2->server);
if(res != 0)
return 0;
else
return strcmp(ps1->name,ps2->name);
}