- 締切済み
ファイルの置換
ファイルを置換するプログラムを作ったのですがうまく置換してくれません。コードは以下のように書きました。(コンパイラは出来ました) #include <stdio.h> #include <stdlib.h> #include <string.h> #define FALSE 0 #define TRUE 1 main() { FILE *fp; char filename[256]; FILE *outfp; char outfilename[256]; char key[128]; char str[128]; char c; int p; int keylen; int i=0 ; int search=FALSE; int count =0; printf(" enter filename"); scanf("%s",filename); printf("seach word"); scanf("%s",key); keylen=strlen(key); printf("change word"); scanf("%s",str); if((fp=fopen(filename,"r"))==NULL) { printf("file open error"); exit(1); } strcpy(outfilename,filename); strcat(outfilename,"_"); if((outfp=fopen(outfilename,"w"))==NULL) { printf("file open error"); exit(1); } while((c=fgetc(fp))!=EOF) { if(search) { if(c != key[i]) { search=FALSE; for(p=0;p<i;p++) { fputc(key[p],outfp); } fputc(c,outfp); i=0; } else{i++;} } else { if(c==key[i]) {search=TRUE;i++;} else {fputc(c,outfp);} } if (keylen==i) { count++; fputs(str,outfp); search=FALSE; i=0; } } fclose(fp); fclose(outfp); printf("apperance number %d\n",count); return 0; } どこか間違っていますか?教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Trick--x--
- ベストアンサー率26% (19/72)
少なくともテキストファイルでは動きますね。 ワードとかのファイルはテキストじゃないので動かなくて当然でしょうし。 #蛇足 printf(" enter filename"); scanf("%s",filename); だと、text.txtと言うファイルを読むときに filenametext.txtというふうになってしまい見目よろしくないので、 printf(" enter filename > ");や printf(" enter filename\n");などとしたほうがいいと思います。 他のprintf-scanfも同様。
- Trick--x--
- ベストアンサー率26% (19/72)
少なくともテキストファイルでは動きますね。 ワードとかのファイルはテキストじゃないので動かなくて当然でしょうし。 #蛇足 printf(" enter filename"); scanf("%s",filename); だと、text.txtと言うファイルを読むときに filenametext.txtというふうになってしまい見目よろしくないので、 printf(" enter filename > ");や printf(" enter filename\n");などとしたほうがいいと思います。 他のprintf-scanfも同様。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
うまくいかないケースを補足してもらえませんか
- uyama33
- ベストアンサー率30% (137/450)
ところで、 扱っているファイルは テキストファイルですか バイナリファイルですか それとも、 ワードのデータや エクセルのデータのようなものですか どちらにしても、 バイナリファイルとして扱い 一文字ずつ写してゆく 方が安心だと思うのですが いかがでしょうか?
- BlueStones
- ベストアンサー率65% (13/20)
プログラム上は問題ないように思われるのですが どのように、うまくいかないのでしょうか?
補足
すみません。初歩的な間違いをしていました。買えたら何とか動かすことが出来ました。ほかにもこの質問に答えて下さった方、変な質問ですいませんでした。