#include "NameHeader.h" int str_comp(DATA_ENG *, DATA_ENG *); main() { FILE *fin; int fd; DATA d[MAX_ITEMS], dat; DATA_ENG d_eng[MAX_ITEMS]; char line[1024]; int i, x1, x2, x3; if ( (fin = fopen(SOURCE, "r")) == NULL ) { printf("Can't open source file [%s]\n", SOURCE); exit(0); } if ( (fd = open(DATA_FILE, O_WRONLY | O_CREAT, 0644)) < 0) { printf("Can't open data file [%s]\n", DATA_FILE); fclose(fin); exit(0); } cnt = 0; while (fgets(line, 256, fin)) { if (!strncasecmp(line, "#Han=", 5)) { if (cnt > 0) { d[cnt-1] = dat; dat.eng[0] = '\0'; dat.han[0] = '\0'; dat.sci[0] = '\0'; } strcpy(dat.han, line+5); trim(dat.han); cnt++; } else if (!strncasecmp(line, "#Eng=", 5)) { strcpy(dat.eng, line+5); trim(dat.eng); } else if (!strncasecmp(line, "#Sci=", 5)) { strcpy(dat.sci, line+5); trim(dat.sci); } else if (!strncasecmp(line, "#Syn=", 5)) { strcat(dat.han, ","); strcat(dat.han, line+5); trim(dat.han); } } d[cnt-1] = dat; x1 = x2 = x3 = 0; for (i=0; i x1) x1 = strlen(d[i].han); if (strlen(d[i].eng) > x2) x2 = strlen(d[i].eng); if (strlen(d[i].sci) > x3) x3 = strlen(d[i].sci); } write(fd, (char *) &cnt, sizeof(int)); write(fd, (char *) d, sizeof(DATA)*cnt); close(fd); fclose(fin); printf("Total Records =[%d]\n", cnt); printf(" MAX han_len=[%d]\n", x1); printf(" MAX eng_len=[%d]\n", x2); printf(" MAX sci_len=[%d]\n", x3); if ( (fd = open(DATA_FILE_ENG, O_WRONLY | O_CREAT, 0644)) < 0) { printf("Can't open data file [%s]\n", DATA_FILE_ENG); exit(0); } for (i=0; i < cnt; i++) { strcpy(d_eng[i].eng, d[i].eng); strcpy(d_eng[i].sci, d[i].sci); } qsort(d_eng, cnt, sizeof(DATA_ENG), (int *)str_comp); write(fd, (char *) &cnt, sizeof(int)); write(fd, (char *) d_eng, sizeof(DATA_ENG)*cnt); close(fd); close(fd); } int str_comp(DATA_ENG *i, DATA_ENG *j) { if (i->eng[0] == '*' && j->eng[0] == '*') return (strcmp(i->eng+1, j->eng+1)); else if (i->eng[0] == '*') return (strcmp(i->eng+1, j->eng)); else if (j->eng[0] == '*') return (strcmp(i->eng, j->eng+1)); else return (strcmp(i->eng, j->eng)); }