#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <math.h>
#define MAX_LINE_LEN 1024
typedef struct{int arraySize;int arrayElements;char ** arrayPtr;} da_string;
void da_string_Init(da_string * dal, int initialSize){dal->arrayElements = 0;dal->arraySize = initialSize;dal->arrayPtr = (char **)malloc(sizeof(char *)*initialSize);}
void da_string_Destroy(da_string * dal){int i;for(i = 0; i < dal->arrayElements; i++)free( dal->arrayPtr[i]);
free(dal->arrayPtr);dal->arrayPtr = NULL;dal->arrayElements = 0;dal->arraySize = 0;}
void da_string_AddItem(da_string * dal, char * item){if(dal->arrayElements >= dal->arraySize){dal->arraySize *= 2;dal->arrayPtr = (char ** ) realloc (dal->arrayPtr, dal->arraySize *sizeof(char *));}dal->arrayPtr[dal->arrayElements++] = item; }
char * da_string_GetItem(da_string * dal, int index){return dal->arrayPtr[index];}
int compareAscInt (const void * a, const void * b){return ( *(int*)a - *(int*)b );}
int compareDcsString (const void * a, const void * b){return (strcmp(*(char **)b,*(char **)a));}
FILE *inputFile = NULL;FILE *outputFile = NULL;
da_string stringArray;
char lineBuffer[MAX_LINE_LEN];
int main(int argc, char *argv[]){if(argc != 3){fprintf(stderr, "error argg\n");return -1;}inputFile = fopen(argv[1], "r+"); //stdin is a valid file streamoutputFile = fopen(argv[2],"w+");da_string_Init(&stringArray,10); while ( fgets (lineBuffer, sizeof(lineBuffer), inputFile) != NULL){char temp[MAX_LINE_LEN];int i,j;for(i = 0,j = -1; i < MAX_LINE_LEN; i++){if(lineBuffer[i] == ','){j = i;printf("%d\n",j);}}if(sscanf(lineBuffer,"%s",temp) == 1){ int dataLen = strlen(temp) + 1;if(dataLen <= 1)continue;char * data = calloc(dataLen,sizeof(char));data[dataLen - 1 ] = 0;strncpy(data,temp,dataLen);da_string_AddItem(&stringArray,data); }
}qsort (stringArray.arrayPtr, stringArray.arrayElements, sizeof(char *), compareDcsString);int i;for(i = stringArray.arrayElements-1; i >= 0; i--){fprintf(outputFile,"%s\n",da_string_GetItem(&stringArray,i) ); }fclose (inputFile);fclose (outputFile);da_string_Destroy(&stringArray);
return 0;}
Tuesday, November 15, 2011
Parsing a text file, sorting lexigraphically and writing the output.
Here is code to parse a text file, sort it, and output it to another file.
Subscribe to:
Posts (Atom)