修改指定文件中的内容
求助各路大神,这是我写的代码,两个子函数功能都没能实现,求大神指点!题目:
2.修改指定文件中的内容。
(1)将指定一行的内容全部替换为空格
(2)将指定一个字符串替换为传入指定的字符串
例如:将文件中的abc替换成1234
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void kongge();
void tihuan();
int main()
{
int a;
char c;
printf("1.将指定一行替换未空格\n");
printf("2.将指定一个字符串替换为指定的字符串\n");
printf("3.结束\n");
loop:
printf("输入相应的序号选择相应的功能:");
scanf("%c",&c);
if(c<='0'||c>'3')
{
printf("输入序号不对请重新输入\n");
goto loop;
}
switch(c)
{
case '1':kongge();break;
case '2':tihuan();break;
case '3':return 0;
}
}
void kongge()
{
FILE *fp;
char file[30],c,c1;
int a,b,num=0;
printf("请输入文件名字:");
scanf("%s",file);
fp=fopen(file,"a+");
if(fp==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
else
{
printf("文件打开成功!\n");
printf("请输入要替换的行数:");
scanf("%d",&a);
for(;;)
{
c=fgetc(fp); //向文件读取一个字符
if(c==10)
num++; //每次读到换行符号时,num自加
if(a==num-1) //当到了我们要的行数时,条件成立
{
fputc(' ',fp); //向文件输入空格符号
c1=fgetc(fp); //读取下一个符号
fseek(fp,-1,SEEK_CUR); //將文件指针往回偏移一个字节
printf("fp=%d\n",ftell(fp)); //检测指针偏移量
if(c1==10) //到了下一个换行符号时停止
break;
}
}
printf("替换完成!\n");
}
if(fclose(fp)==0)
{
printf("文件关闭成功!\n");
}
else
{
printf("文件关闭失败!\n");
}
}
void tihuan()
{
FILE *fp,*fp1;
char file[30],c[30],file1[30],c3,c4[30];
int i,n,num,loop=0;
printf("请输入读取文件名字:");
scanf("%s",file);//文件1名字
fp=fopen(file,"a+");
printf("请输入保存文件名字:");
scanf("%s",file1);//文件2名字
fp=fopen(file1,"a+");
if(fp==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
printf("输入被替换的字符串:");
scanf("%s",c);
printf("输入要替换的字符串:");
scanf("%s",c4);
n=strlen(c);//算出字符串长度
char c1[n];
while(1)
{
for(i=0;;i++)
{
fgets(c1,n+1,fp); //获取长度为n个字节的字符串,并且赋值给c1
printf("%d",ftell(fp)); //检测文件1指针是否偏移
if(strcmp(c1,c)==0) //判断两个字符串是否相等
{
num=ftell(fp); //获得文件1指针的偏移量
char c2[num+1]; //定义一个足够长的字符串(此处可能不太好),指针偏移量大时,该数组太大
fgets(c2,num+2,fp); //从文件中获取num+1个字节的字符串赋值给c2
fputs(c2,fp1); //把c2的内容传到文件2中
fputs(c4,fp1); //把c4的内容也传进去
while(1)//用循环把文件1的内容传到文件2去
{
c3=fgetc(fp);
fputc(c3,fp1);
if(feof(fp)!=0) //判断文件1的内容是否已经读取完毕
{
goto loop;
}
}
}
else //字符串不相等时执行此语句
fseek(fp,-(n-1),SEEK_CUR);
if(feof(fp)!=0) //循环到此时证明文件1中没有c【】中的字符串
{
break;
}
}
}
loop:
printf("替换完毕!\n");
if(fclose(fp)==0)
{
printf("文件关闭成功!\n");
}
else
{
printf("文件关闭失败!\n");
}
}
[此贴子已经被作者于2018-7-13 21:30编辑过]