c语言实现删除文件的指定行(内容)

本文介绍了一个使用C语言实现的程序,该程序可以从指定的文本文件中删除从某一行开始直到遇到特定标记的所有内容。通过用户输入确定起始行,然后逐行检查并保留不需删除的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

#include<stdio.h>

#include<string.h>


int main()
{
    FILE *ff,*fp;
    int temp=0;//temp主要用来某行判断是否删除,0表示不删除,1表示删除
    char a[1000];//放置fgets的某一行内容
    char b[1000];//保存用户输入的内容
    char c[5]="*\n";//这里将特定字符设置为 “*”


    printf("请输入要删除的开始行(的内容):\n");
    scanf("%s",b);//输入要删除的内容
    strcat(b,"\n");//因为fgets函数在读取的字符后面自动添加一个换行符,为能用strcmp比较a和b,这里为b加上“\n”


    ff=fopen("index.txt","r");//读打开原文件index.txt
    fp=fopen("result.txt","w");//写打开临时文件result.txt


    if(ff==NULL || fp==NULL){
        printf("打开文件失败\n");
        exit(0);//退出
    }


    while(fgets(a,1000,ff))//逐行执行index.tzt里面的内容
        {
            if(strcmp(a,b)!=0 && temp ==0)//如果与输入的内容不相等temp不等于0,则不删除
               {
                   printf("%s",a);//将不删除的内容输出在控制台上(跟result文件内容是一致的)
                   fputs(a,fp);//将不删除的内容写入result.txt中
               }
               else//找到与输入内容匹配的行
               {
                    temp = 1;
                    if(strcmp(a,c)==0)//遇到下一个*,则从该行开始不再删除
                    temp = 0;
               }
        }
    fclose(ff);//关闭index文件
    fclose(fp);//关闭result文件
    return 0;

}

执行程序:

输入list1,表示从list1所在行开始,直至“*”,中间的内容全部删除

 

index.txt文件


result.txt文件 


### C语言实现删除TXT文件指定内容实现在C语言删除TXT文件中的特定内容,可以采用读取整个文件到内存,在内存中修改数据后再写回文件的方法。下面是一个简单的例子说明这一过程[^1]。 #### 方法概述 - 打开目标文本文件并逐读入缓冲区。 - 将每一行存储在一个动态分配的字符串数组里。 - 当遇到需要被移除的那一行时跳过保存这一步骤。 - 完成遍历之后关闭源文件重新打开以覆盖模式写入剩余的数据。 - 清理资源释放所有已分配给临时变量的空间。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 256 // 假设每不超过256字符长度 void delete_line(const char* filename, int line_to_delete){ FILE *file = fopen(filename, "r"); if (!file) { perror("无法打开文件"); exit(EXIT_FAILURE); } char **lines; size_t num_lines = 0; lines = malloc(0); char buffer[MAX_LINE_LENGTH]; while (fgets(buffer, sizeof(buffer), file)) { ++num_lines; lines = realloc(lines, num_lines * sizeof(*lines)); if(line_to_delete != num_lines){ // 跳过应删除 lines[num_lines - 1] = strdup(buffer); }else{ lines[num_lines - 1]=NULL; // 标记此为待删状态 } } fclose(file); // 写回到原文件前先清空它 freopen(filename,"w",stdout); for(size_t i=1;i<=num_lines;++i){ if(lines[i-1]!=NULL){ fputs(lines[i-1], stdout); free(lines[i-1]); } } printf("\n"); free(lines); } ``` 请注意上述代码只是一个基础框架,实际应用可能还需要考虑更多边界情况以及错误处理机制。此外,对于非常大的文件来说这种方法可能会占用较多内存空间,因此针对大文件的操作应当寻找更高效的解决方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值