Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //Setup a simple record structure
- typedef char linetype[255];
- typedef char string[16];
- struct user {
- char firstname[30];
- char lastname[30];
- int age;
- }array[5]={{"mark", "johnston",50},{"joe","bloggs",30},{"jill","sykes",40},{"bob","builder",35}};
- struct record {
- char transType;
- string seriesID;
- string productID;
- // char flag;
- int month;
- // char ex;
- int version;
- int generation;
- char index1;
- char index2;
- float orderPrice;
- string invStart;
- string invEnd;
- int orderSize;
- int numOrders;
- int aggregate;
- };
- void readline(linetype line,record &rec)
- { string data[16];
- int i=2,j,finish;
- int start=2;
- int element=1;
- data[0][0]=line[0];data[0][1]='\0';
- while(i<strlen(line)) {
- if(line[i]==','){
- if(line[i-1]==',') { start+=1;finish=i;}
- else {
- finish=i;
- if(finish-start==1) {;data[element][0]=line[i-1];data[element][1]='\0';start=finish+1;element++;}
- else {
- for(j=0;j<finish-start;j++) data[element][j]=line[start+j];
- data[element][j]='\0';
- element++;
- start=finish+1;
- ;
- }
- }
- }
- if(finish==i) i=finish+1; else i++;
- }
- rec.transType=data[0][0];strcpy(rec.seriesID,data[1]);strcpy(rec.productID,data[2]);rec.month=atoi(data[3]);
- rec.version=atoi(data[4]); rec.generation=atoi(data[5]);
- rec.index1=data[6][0];rec.index2=data[7][0];rec.orderPrice=atof(data[8]);
- strcpy(rec.invStart,data[9]);strcpy(rec.invEnd,data[10]);rec.orderSize=atoi(data[11]);
- rec.numOrders=atoi(data[12]);rec.aggregate=atoi(data[13]);
- }
- int main()
- {
- //Setup a pointer to the struct
- struct user* data;
- struct record* wdata;
- data = (struct user*) malloc(sizeof(struct user));
- wdata = (struct record*) malloc(sizeof(struct record));
- *data=array[0]; // put first record in the pointer
- FILE* fd; record rec;
- FILE* fw;
- int i;
- linetype line;
- fd=fopen("testdata.txt","r");
- fw=fopen("testwriterand.dat","wb"); // open binary file for writing
- if (!fd) printf("no file");
- fscanf(fd,"%s",line);
- while (!feof(fd)) {
- fscanf(fd,"%s",line);
- // fscanf(fd,"%s",line);
- readline(line,rec);
- *wdata=rec;
- fwrite((struct record*) wdata,sizeof(struct record),1,fw);
- // printf("%d\n",rec.month);
- }
- fclose(fd);fclose(fw);
- /*
- fd=fopen("test.dat","wb"); // open binary file for writing
- // Can write a block of memory (4 records) to file
- fwrite((struct user*) array,sizeof(struct user),4,fd);
- // or just write one record
- fwrite((struct user*) data,sizeof(struct user),1,fd);
- fclose(fd);
- fd=fopen("d:\\datastructures\\testwrite.dat","rb"); //open binary file for reading
- fseek(fd, sizeof(record)*5,0); // go to the 4th record
- fread((struct record*) wdata,sizeof(struct record),1,fd);
- printf("%s\n%f\n%s\n%s\n%d\n",(*wdata).productID,(*wdata).orderPrice,(*wdata).invStart,(*wdata).invEnd,(*wdata).numOrders);
- fclose(fd);
- */
- system ("Pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement