#C语言将记录写入文件中并进行读取记录按关键字搜索例子
##题目
;
##个人体会:
1.利用每条记录中的分隔符,进行拆分并拼接,注意Remove the ‘n’,at the end of each record.
2.注意拼接时,间隔的字节数,指针很好用,可以精确到每个字节.
3.中文记录运行正常.
4.体会到最简易的搜索方法.
5.C语言的拼接方法不如python中的更易于直接使用,尤其是python进行多级dict的层序遍历时。
6.没有找到类似strcpy中可以按地址加上字节数的方法进行string复制,有待改进.
没有去掉原来注释掉的部分,为了以后有更多的思考.
7.测试环境codelite v16.0.0.
#include#include #include typedef struct product_st { char name[20]; char place[20]; }Prdct; int main(int argc, char *argv[]) { enum {N = 4}; Prdct prdt[N]; int i; FILE *fp; fp = fopen("D:\prod.txt","w"); if(fp == NULL) { fprintf(stderr,"open() failed!"); exit(1); } for(i = 0; i < N; i++) { puts("nEnter product name and place:n"); gets(prdt[i].name); fwrite(&prdt[i].name,strlen(prdt[i].name),1,fp); fputc(',',fp); gets(prdt[i].place); fwrite(&prdt[i].place,strlen(prdt[i].place),1,fp); fputc('n',fp); } fclose(fp); puts("Save file successfully!n"); // Read file fp = fopen("D:\prod.txt","r"); if(fp == NULL) { fprintf(stderr,"open() failed!"); exit(1); } char name[256]= {' '}; //Find product name according place. // Read one line. char pname[20]; char pplace[20]; char tmp[20]; char result[256]; char *p = result; int idx; int cnt = 0; puts("Enter place like[USA,UK]"); gets(tmp); //tmp[strlen(tmp)+1] = ' '; while(fgets(name,256,fp)) { //read one record to name. //fscanf(fp,"%[^n]",name); //fscanf(fp,"%[^n]",name); for(i = 0; i < strlen(name); i++) { if(name[i] == ',') { idx = i; } } //get product name. for(i = 0; i < idx; i++) { *(pname + i) = name[i]; } // Notice. pname[i] = ' '; //get product place. strcpy(pplace, &name[idx+1]); //remove the 'n',at the end. pplace[strlen(pplace)-1]= ' '; printf("pname = %s place = %sn",pname,pplace); if((strcmp(tmp,pplace)) == 0) { strcpy(p,pname); puts(pname); puts(p); puts("strcpyn"); //p pointer address increae one pname bytes p = p + strlen(pname); } //puts(tmp); //puts(pplace); // for(i = 0; i < tmp[i] != ' '; i++) // { // if(tmp[i] == pplace[i]) // { // cnt++; // } // else // { // break; // } // } // if(cnt == strlen(pplace)) // { // puts(tmp); // puts(pplace); // } } p[strlen(p)+1] = ' '; puts("n"); puts(result); // char tmp[20]= {' '}; // // puts("Enter place like[USA,UK]"); // gets(tmp); // for(i = 0; i < N; i++) // { // if((fread(&prdt[i],sizeof(prdt[i]),1,fp)) > 0) // { // if(strcmp(tmp,prdt[i].place) == 0) // { // strcpy(name,prdt[i].name); // } // } // // } // // printf("%s n", name); puts("Hello, World!"); fclose(fp); return 0; }



