当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

c语言删除文件指定的某一行

更新:03-01 整理:39baobao.com
字体:

[易语言ftp文件上传到指定文件夹].版本 2 .支持库 downlib .支持库 iext .支持库 internet .程序集变量 上传文件, FTP上传对象 .程序集变量 参数, 任务参数 .子程序 上传 参数.类型 = 2 + 3 ' 参数详见提示...+阅读

这个程序适用于文件不是很大的情况,最好不要大于2G先说思路,把文本文件按行读入内存,在内存中的结构是一个双向链表,每一个链表节点放一行。文本文件 a.txt 先准备好,比如内容如下:this is line 1this is line 2this is line 3this is line 4this is line 5this is line 6//以下是代码#include#include#includetypedef struct lnode{ //define line node struct lnode *prev; struct lnode *next; char *line;} lnode;typedef struct line_in_mem{ lnode *head; lnode *tail;} line_in_mem;lnode *newnode(void){ // return a node in heap return (lnode *)malloc(sizeof(lnode));}lnode *get_position(line_in_mem *lines){ // prepare an lnode whose line is NULL, to store a line read from file lnode *node = newnode(); if(!node) return NULL; node->prev = node->next = NULL; if(lines->head == NULL) lines->head = lines->tail = node; else{ lines->tail->next = node; node->prev = lines->tail; lines->tail = node; } return node;}void readfile(line_in_mem *lines, FILE *file){ // read lines from file and store them in struct line_in_mem char *buf = NULL; int n = 0; while(getline(&buf, &n, file) >0){ lnode *node = get_position(lines); if(node) node->line = buf; else exit(-1); buf = NULL; }}static void print_line(line_in_mem *line){ // show lines in mem, which may not be needed lnode *node; for(node = line->head; node ; node = node->next){ printf("%s", node->line); }}void delete_line(line_in_mem *line, int line_no){ //given a line number, delete it from the list. if line_no is less than 0 or bigger than total of lines, do nothing lnode *node = line->head; while(--line_no >0 & node) node = node->next; if(!node) return; if(node->prev) node->prev->next = node->next; if(node->next) node->next->prev = node->prev; free(node);}void savefile(line_in_mem *lines, FILE *file){ //truncate file to 0 and write back freopen("a.txt","w",file); lnode *node; for(node = lines->head; node; node = node->next){ fwrite(node->line, sizeof(char), strlen(node->line)/sizeof(char), file); }}int main(){ line_in_mem lines; lines.head = lines.tail = NULL; int line_no = 3; FILE *file = fopen("a.txt","r"); if(!file) return -1; readfile(&lines, file); //read file into mem. the struct of file in mem is a list of line print_line(&lines); printf("---------------\n"); delete_line(&lines, line_no); //delete line_no in mem print_line(&lines); savefile(&lines, file); //write back fclose(file); return 0;}

c语言如何在特定的某一行进行删除插入等

C语言文件操作有覆盖和追加两种模式,但不提供插入模式。所以要在文件中指定行进行删除或者插入,需要按照如下流程操作:

1、以只读打开文件;

2、将文件逐行读入到内存中;

3、关闭文件;

4、在内存中对指定行插入或者删除;

5、以只写打开文件;

6、将修改后的数据写入文件;

7、关闭文件。

参考代码:

假定文件最多100行,执行删除第5行,并在原第8,9行中间插入一行数据为例,代码如下:

#include

#include

char buf[100][1000];

int main()

{

FILE *fp;

char *s="abcdef\n";//要插入的数据

int i=0;

int n=0;

fp = fopen("my.txt", "r");//读方式打开文件

while(fgets(buf[n], 1000, fp) != EOF)//循环读取所有数据

n++;

fclose(fp);//关闭文件。

for(i = 4; i<7; i ++)//删除第五行

strcpy(buf[i],buf[i+1]);

strcpy(buf[7], s);//插入到第8行。

fp=fopen("my.txt", "w");//写方式打开文件。

for(i = 0; i < n; i ++)//写入所有处理后的数据。

fputs(buf[i], 1000, fp);

fclose(fp);//关闭文件。

return 0;

}

本文地址:https://www.39baobao.com/show/29_47344.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

易语言如何读取指定文件夹下面的所有 txt的文件你说的这种,要搜索指定文件夹下的所有文件,包括子文件下的文件。那么你要用到递归方式来搜索,你欠缺基础知识的学习,呵呵。下面,我提供给你,我专门制作的子程序,用来调用递归搜索的...

C语言中删除一个数组元素main() {int i,n; int a[8]={1,2,3,4,5,6,7,8};/*可以自己定义的,这里为了方便*/ printf("\nthe original array a:"); for(i=0;i<8;i++) printf("%-3d",a[i]); printf("\n"); print...

C语言如何读取一行数据以空格分开C语言的<string.h&gt;中有一个strtok函数可以用来分割单词,见下面的程序: #include <stdio.h> #include <string.h> char buf[1000000]; int main() { FILE *fin; char *p; fin...

c语言文件输入输出嘿嘿,这东西还靠我啊o(∩_∩)o... #include<stdio.h> int main() { FILE *fp; char ch; fp = fopen("NewFile.txt","w"); do { ch = getchar(); fputc(ch,fp); }while(ch != '$');...

C语言怎样读取文本的每一行可以使用fgets函数来实现。 1 函数名: fgets 2 声明形式: char *fgets(char *buf, int bufsize, FILE *stream); 3 头文件: stdio.h 4 功能及参数说明: 从stream中读取一行数据...

C语言怎么读取文件的每一行的内容#include <stdio.h> int main() { int i,n; char a[1024]; FILE *fp; gets(a); if((fp=fopen(a,"r"))==NULL) { printf("File Name Error.\n"); return 0; } scanf("%d",&n); i=0;...

易语言怎么替换文件内的指定内容1、打开易语言集成开发环境注意要选择window窗口程序要不然不出来窗口的大家一定注意 2、新建一个变量然后按照下面进行操作就可以了 程序集 窗口程序集1 .子程序 _按钮1_被...

C语言的文件操作//先解释一下文件合并的意思 //假设文件A中是cba,文件B中是zyx,则合并后(按字母顺序)文件C中是abcxyz //你给的程序中有三处错误。两处fputs函数错误,一处逻辑错误,以下程序已修正...

易语言删除有 XXX的一行文字你添加一个编辑框一个按钮测试一下,代码给你写好了,我已经测试好的: .版本 2 .程序集 窗口程序集1 .子程序 _按钮1_被单击 .局部变量 位置, 整数型 .局部变量 计次, 整数型 .计次...