2009年4月13日 星期一

在檔案裡搜尋字串並取代

在檔案裡搜尋字串並取代 ( 只能搜尋取代一次,無法整篇文章取代 )

int Replaceword (unsigned int size, const char *skeyword, 
const char *reword, const char *cfp, const char *cnewfp)
{
char ckw[size];
unsigned int uikwlen=strlen(skeyword)+1;
int i=0; // 偏移量
FILE *fp=fopen(cfp,"r");
FILE *newfp=fopen(cnewfp,"w+");
char check=0;

//找尋keyword的位置
for(i=1;fgets(ckw,uikwlen,fp)!=NULL;i++)
{ //printf("ckw=%s\n",ckw);
if(strcmp(ckw,skeyword) == 0)
{
printf("fine_keyword=%s\n",ckw);
check=1; // Found
break;
}
rewind(fp);
if(ckw[0]=='\n') //為了在字串結尾只有一個\n
i++;
fseek(fp,i,SEEK_SET);

fprintf(newfp,"%c",ckw[0]);
}
if (!check)
return 0;

//取代字串
fclose(newfp);
newfp=fopen(cnewfp,"a+");
fprintf(newfp,"%s",reword);

//寫入剩下的字串
fclose(newfp);
newfp=fopen(cnewfp,"a+");
i=i+uikwlen-2; //為何減2,減1 是為了\n,另一個減 1 是...?
fseek(fp,i,SEEK_SET);
for(i=i+1;fgets(ckw,uikwlen,fp)!=NULL;i++)
{
//printf("ckw=%s\n",ckw);
rewind(fp);
if(ckw[0]=='\n') //為了在字串結尾只有一個\n
i++;
fseek(fp,i,SEEK_SET);

fprintf(newfp,"%c",ckw[0]);
}


fclose(newfp);
fclose(fp);

return check;

}

int main ()
{
int a=0;
const char *fp="C:\\file.txt";
const char *newfp="C:\\newfile.txt";
int i;

a=Replaceword (20,"Ver","VID=VEN_909",fp,newfp);

printf("a=%d\n",a);
system("pause");
return 0;
}

沒有留言:

張貼留言