| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3292 人关注过本帖
标题:修改指定文件中的内容
只看楼主 加入收藏
十里画码
Rank: 2
等 级:论坛游民
帖 子:36
专家分:20
注 册:2018-7-9
结帖率:100%
收藏
已结贴  问题点数:8 回复次数:9 
修改指定文件中的内容
求助各路大神,这是我写的代码,两个子函数功能都没能实现,求大神指点!

题目:
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编辑过]

搜索更多相关主题的帖子: 文件 替换 字符串 printf 输入 
2018-07-13 21:28
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
收藏
得分:0 
编译错误太多,建议修改错误后重新把代码发出
2018-07-13 21:38
十里画码
Rank: 2
等 级:论坛游民
帖 子:36
专家分:20
注 册:2018-7-9
收藏
得分:0 
回复 2楼 kfyniriu
我编译没问题呀
2018-07-13 22:03
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:4 
编译通过。
文件操作调试起来麻烦。你没有提供要编辑的文件,也没有指定文件格式(二进制文件,文本文件),文件内容格式,怎么换行。对文件操作涉及到字符集,是宽字符还是ANSI字符?这个字符集还与操作系统有关。要想简单,最好在纯英文操作系统下,并且是ANSI字符集下操作英文文本文件。但我们现在都是中文win,不好模拟你的环境。
貌似你打开文件的格式。。。?  a+ ==> w ?
2018-07-13 22:20
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:2 
读一个字符写一个字符比较讨厌。一般可读一行字符或者读指定字节(比如100字节),处理后写回文件。当然不是非要这样做。
2018-07-13 22:27
十里画码
Rank: 2
等 级:论坛游民
帖 子:36
专家分:20
注 册:2018-7-9
收藏
得分:0 
回复 4楼 zbjzbj
额,这是老师的作业,我是对缓存文件进行操作,说到文件格式老师也没有说要求,那就是文本格式了,至于说到的字符集,这个老师好象没跟我们讲过。
操作的话,我用的是linux系统操作的,编译用的是gcc编译。
文本格式是txt格式的。
2018-07-13 23:23
十里画码
Rank: 2
等 级:论坛游民
帖 子:36
专家分:20
注 册:2018-7-9
收藏
得分:0 
回复 5楼 zbjzbj
如果是读一行字符的话怎么读,假如我想向文件写一行字符那要怎么写
2018-07-13 23:27
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
收藏
得分:2 
回复 7楼 十里画码
fread,fwrite,可以整段读写,或者用fseek直接跳到你需要插入的位置
2018-07-14 20:49
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
回复 7楼 十里画码
请原谅我没有回答你的问题。
c语言这些概念我根本记不住,用的时候也就是查书。
所以,闲了话,上论坛就是读读代码或问题消遣,揪个错什么的。
偶有时候调试一下代码。
发现问题,也就是用汉语表述一下思路。
写代码对我来说费劲。
2018-07-14 21:05
十里画码
Rank: 2
等 级:论坛游民
帖 子:36
专家分:20
注 册:2018-7-9
收藏
得分:0 
回复 9楼 zbjzbj
嗯嗯,谢谢你
2018-07-14 21:26
快速回复:修改指定文件中的内容
数据加载中...
 
   



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

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