我这里有一个文件,怎么用C的办法将指定的有效信息提取出来
文件内容如下:
0x801f0000 4 7 [自动][手动][编辑][参数][诊断][图库][帮助]
0x801f001c 8 8 [关于产品][自动功能][手动功能][编辑功能][参数设置][自检功能][图库功能][退出帮助]
。。。。。。
第一个信息是地址, 第二个是字符串所占的长度, 第三个是有几个这样的字符串, 第四个就是要送到这个地址的内容
现在我要读出地址,将[]里面的内容全部放到所指定的地址。 求高手帮忙,特急
[解决办法]
- C/C++ code
//in.txt//0x801f0000 4 7 [自动][手动][编辑][参数][诊断][图库][帮助]//0x801f001c 8 8 [关于产品][自动功能][手动功能][编辑功能][参数设置][自检功能][图库功能][退出帮助]//……//第一列是地址, 第二列是字符串所占的字节长度, 第三列是有几个这样的字符串, 第四列就是要放到这个地址的内容//现在我要读出地址,将[]里面的内容全部放到所指定的地址。#include <stdio.h>FILE *f;int n;int r;int i;int j;int c;unsigned char *p;int addr,addrl;int len;int cnt;void main() { f=fopen("in.txt","rb"); if (NULL==f) { printf("Can not open file in.txt\n!"); return; } n=0; addrl=0; while (1) { r=fscanf(f,"0x%8x",&addr); if (EOF==r) break; if (1!=r) { printf("Line %d can not read 0xNNNNNNNN ...!\n",n+1); break; } if (addrl) { if (addr!=addrl+len*cnt) { printf("Line %d addr 0x%08x is not continuous!\n",n+1); break; } } r=fscanf(f,"%d%d ",&len,&cnt); if (2!=r) { printf("Line %d can not read 0xNNNNNNNN len cnt ...!\n",n+1); break; } p=(unsigned char *)addr; printf("\naddr==%08x:",addr); for (i=0;i<cnt;i++) { c=fgetc(f); if ('['!=c) break; for (j=0;j<len;j++) { c=fgetc(f); if (EOF==c) break;// p[i*len+j]=(unsigned char)c;//将对应字符填写到对应地址处,为避免Windows非法内存写而暂时注释掉 printf("%c",c); } if (EOF==c) break; c=fgetc(f); if (']'!=c) break; } if (i<cnt) { printf("Line %d format error!\n",n+1); break; } addrl=addr; c=fgetc(f);//跳过行尾的'\r' c=fgetc(f);//跳过行尾的'\n' n++; } fclose(f);}////addr==801f0000:自动手动编辑参数诊断图库帮助//addr==801f001c:关于产品自动功能手动功能编辑功能参数设置自检功能图库功能退出帮助