| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 405 人关注过本帖
标题:文件里的关键字替换问题,求助!
只看楼主 加入收藏
onnex
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-5-24
收藏
 问题点数:0 回复次数:0 
文件里的关键字替换问题,求助!

多谢斑竹的指点,问题已经解决了,多谢!多谢!
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);
}

2006-05-25 20:05
快速回复:文件里的关键字替换问题,求助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015834 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved