多谢斑竹的指点,问题已经解决了,多谢!多谢!
http://www.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=66665&page=2
不过这个程序还有第二个要求,就是替换功能:
比如说eingabe.txt的第10行是 #ERSATZ abc def , 那么从第11行开始所有的abc字段都要替换成的def,
接着如果第15行是 #ERSATZ ijk xyz , 那么从第16行开始所有的ijk字段都要替换成的xyz,遇到abc还要继续替换成def。
我的想法是,把刚才插入做好的文件打开,按行读入,按空格分成若干字符串,分别对比,基本上可以完成任务,不过还是有以下的问题出现,而无法解决:
1,原文件中如果有连续多个空格,则会被忽略,如果有空行,就是这一行只有一个回车,也会被忽略。
2,每行最后一个字符串不会对比,不知道为什么。
3,输出的时候,有些行第一个字符会多出个空格。
是不是我的基本思想就有问题?还是我的实现方法不好呢,请斑竹腾出点时间,再给指点一下!多谢多谢!
代码如下:
#include <string.h>
#include <stdio.h>
void writeto(FILE *source,FILE *ziel){
char ch;
ch=fgetc(source);
while(ch!=EOF){
fputc(ch,ziel);
ch=fgetc(source);
}
}
int main(void)
{
char *p;
FILE *fpr,*fpi,*fpn;
char str[81],stro[81],a[2][80],e[80][80],b[2][32][80];
int i, j, k, q = 0;
if((fpr=fopen("d:\\eingabe.txt","rt"))==NULL){
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
if((fpn=fopen("d:\\temp.txt","wt"))==NULL){
printf("\nCannot open file strike any key exit!");
getch();
exit(1);
}
while(feof(fpr)==0){
fgets(str,80,fpr);
strcpy(stro,str);
p = strtok(str, " ");
if (p) strcpy(a[0],p);
p = strtok(NULL, " ");
if (p){
strtok(p, "\n");
strcpy(a[1],p);
}
if (strcmp(a[0],"#EINBAU") == 0){
if((fpi=fopen(a[1],"rt"))==NULL){
printf("Cannot open file strike1 any key exit!");
getch();
exit(1);
}
writeto(fpi,fpn);
}
else
fputs(stro,fpn);
}
fclose(fpr);
fclose(fpi);
fclose(fpn);
/* 这里以下开始第二个功能:替换 */
if((fpr=fopen("d:\\temp.txt","rt"))==NULL){
printf("\nOeffnen von temp.txt fehlgeschlagen.\n");
getch();
exit(1);
}
if((fpn=fopen("d:\\ausgabe.txt","wt"))==NULL){
printf("\nOeffnen von ausgabe.txt fehlgeschlagen.\n");
getch();
exit(1);
}
while(feof(fpr)==0){
fgets(str,80,fpr);
p = strtok(str, " ");
if (p) strcpy(e[0],p);
for (i = 1; i < 80; i++){
p = strtok(NULL, " ");
if (p)
strcpy(e[i],p);
else
break;
}
if (strcmp(e[0],"#ERSATZ") == 0){
strcpy(b[0][q],strtok(e[1],"\n"));
strcpy(b[1][q++],strtok(e[2],"\n"));
}
else{
for (j = 0; j < i; j++)
for (k = 0; k < q; k++)
if (strcmp(e[j],b[0][k]) == 0)
strcpy(e[j],b[1][k]);
fprintf(fpn,"%s ",e[0]);
for (j = 1; j < i; j++)
fprintf(fpn," %s",e[j]);
}
}
fclose(fpr);
fclose(fpn);
}