c语言删除文件中的指定的一行数据怎么做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言删除文件中的指定的一行数据怎么做相关的知识,希望对你有一定的参考价值。

    你平时应该有这样的经历,打开一个.txt格式的小说,在里面删除几个字,系统反应却很慢,这是为什么呢?因为文件里的内容都是在硬盘上按顺序一个字节挨着一个字节摆放的,读取文件的时候,会从文件首地址一直读到文件结束标记“-1”。如果能够直接把文件里面的几个字节删掉,那么下次这个文件怎么读呢?怎么区分中间那几个字节被删掉了呢?所以对于这些简单的文件来说,要想直接删除里面的内容是不可能的。
    一般有两个方法实现这个功能:
    1.把要保留的内容写到另一个文件中,要删掉的内容就不用写了。
    2.把要保留的内容存储到一个字符串变量中,要删掉的内容不用存储,最后把这个字符串再写回到原文件中覆盖原来的内容。

    例程:

    #include<stdio.h>
    struct data

        int bianhao;
        char fenlei[10];
        char ming[12];
        int shijian[3];
        float jiage;

    void del(int num)//定义删除指定编号的内容的函数 
        FILE *f1;//操作的文件 
        long length;//文件总长度 
        char *f2;//用于记录要保存的内容 
        char s[100];//用于保存每次读取的一行内容 
        int n;//用于存储编号 
        f1=fopen("data.txt","r");//以读的方式打开文件 
        fseek(f1,0,2);//文件指针移到文件尾 
        length=ftell(f1);//取得文件长度 
        f2=(char *)malloc(sizeof(char)*length);//给f2分配文件长度的空间 
        *f2=0;//使得f2字符串的长度初始为0 
           rewind(f1);//文件指针回到文件头 
        while(ftell(f1)<length-3)//当文件没有结束时就依次读取文件的每一行 
            fgets(s,100,f1);//读取一行信息 
            n=atoi(s);//从读取的信息取得编号 
            if(n==num) continue;//如果编号是要删除的编号,就不用保存这一行信息了 
            strcat(f2,s);//保存读取到的这一行信息 
        
           fclose(f1);//关闭文件 
        f1=fopen("data.txt","w");//重新以写的方式打开文件 
        fputs(f2,f1);//把保存的信息重新存储到文件当中 
        fclose(f1);//关闭文件 

    int main()
        del(1); //调用上面定义的函数删除指定编号的内容 
        del(3); //参数为编号 
        system("pause");//暂停一下 

参考技术A 把要删除记录的后续记录读进来,在从要删除的位置写回去.不就把要删除的数据给覆盖了吗. 参考技术B 文本还行,二进制文件就不行了.
如果是文本直接寻找\n就行.
参考技术C 用正则表达式来判断!

C语言中怎样实现对数组数据的删除、修改?

参考技术A #include\\x0d\\x0atypedef struct Node\\x0d\\x0a int a,b;\\x0d\\x0anode;\\x0d\\x0anode c[100];\\x0d\\x0aint n;\\x0d\\x0avoid print()\\x0d\\x0a int i;\\x0d\\x0a printf("\n当前数据:\n");\\x0d\\x0a for(i=1;i<=n;i++)\\x0d\\x0a printf("第%d组:a=%d,b=%d\n",i,c[i].a,c[i].b);\\x0d\\x0a \\x0d\\x0a printf("\n\n");\\x0d\\x0a//输出 \\x0d\\x0avoid setnum()\\x0d\\x0a int i;\\x0d\\x0a printf("输入n,表示共有n组数据:\n");\\x0d\\x0a scanf("%d",&n);\\x0d\\x0a for(i=1;i<=n;i++)\\x0d\\x0a printf("输入第%d组数据的两个值a、b,用空格隔开:\n",i);\\x0d\\x0a scanf("%d%d",&c[i].a,&c[i].b);\\x0d\\x0a \\x0d\\x0a//设置数据 \\x0d\\x0avoid remove()\\x0d\\x0a int i,j;\\x0d\\x0a printf("输入i,表示要删除第i数据:\n");\\x0d\\x0a scanf("%d",&i);\\x0d\\x0a for(j=i;j<=n-1;j++)\\x0d\\x0a c[j]=c[j+1];\\x0d\\x0a //循环覆盖,让后一个覆盖前一个,所以j最大值取n-1 \\x0d\\x0a n--;//结构体中的元素减少1个 \\x0d\\x0a//删除数据 \\x0d\\x0avoid chang()\\x0d\\x0a int i,aa,bb;\\x0d\\x0a printf("输入i,a,b,表示要将第i组数据修改成a、b:\n");\\x0d\\x0a scanf("%d%d%d",&i,&aa,&bb);\\x0d\\x0a c[i].a=aa;\\x0d\\x0a c[i].b=bb;//直接赋值修改 \\x0d\\x0a//修改数据 \\x0d\\x0amain()\\x0d\\x0a int m;\\x0d\\x0a while(1)\\x0d\\x0a printf("输入:1-输入数据,2-修改数据,3-删除数据\n 4-输出数据,0-退出\n");\\x0d\\x0a scanf("%d",&m);\\x0d\\x0a if(m==0) break;\\x0d\\x0a else if(m==1) setnum();\\x0d\\x0a else if(m==2) chang();\\x0d\\x0a else if(m==3) remove();\\x0d\\x0a else if(m==4) print();\\x0d\\x0a \\x0d\\x0a

以上是关于c语言删除文件中的指定的一行数据怎么做的主要内容,如果未能解决你的问题,请参考以下文章

如何用c语言实现删除文件中指定的数据;例如

用linux c语言编写 为一个文件里面的内容的每一行添加一个指定的字符

怎么对C语言中的文件进行内容添加,删除,查找的操作?

C语言数组的删除,插入

C语言中怎样实现对数组数据的删除、修改?

C语言中怎样实现对数组数据的删除、修改?