C语言实现删除匹配的某一行文本

一、前言

在处理文本文件需要对某行文本进行查询、修改、删除操作,本文采用了创建中间缓冲文件buff.txt的思想对这一删除操作进行实现。

二、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <string.h>
void ChangeFile( char *FileName, char *KeyStr) {
FILE* fp1 = fopen(FileName, "r");
if (fp1 == NULL) {
printf("打开文件失败!\n");
return;
}
// 创建一个临时文件
FILE* fp2 = fopen("buff.txt", "a");
// 给 buff 里面写;
char strLine[1024] = {0};
while (!feof(fp1)) {
fgets(strLine, 1024, fp1);
char* ans = strstr(strLine, KeyStr);
if (ans != NULL) {
continue;
} else {
fprintf(fp2, "%s", strLine);
}
}
fclose(fp1);
fclose(fp2);
// 删除原来的文件,再将 buff 文件的名称修改为 FileName
remove(FileName);
rename("buff.txt", FileName);
}
int main() {
char *FileName = "/Users/CProjects/Stusys/stusts/1.txt";
char KeyStr = "2222";
ChangeFile(FileName, KeyStr);
return 0;
}

三、效果

比如我们的 1.txt 文本文件以下内容:

fqeasdqecwqe
dfsdfdsfsd
sdfsdfsdfsd
2222fefwefwe
fwefwesdw2222
fewsdcedsf
redscxwescr3334234
3sdfsa
dfsdfdsfsdewfd
c
zs
cwe
fewsdcedsfwe
fewsdcedsfewf
w
xasxcascs

编译运行程序,运行结果如下:

fqeasdqecwqe
dfsdfdsfsd
sdfsdfsdfsd
fewsdcedsf
redscxwescr3334234
3sdfsa
dfsdfdsfsdewfd
c
zs
cwe
fewsdcedsfwe
fewsdcedsfewf
w
xasxcascs

成功地删除了两行:

2222fefwefwe
fwefwesdw2222

四、总结

我们用FILE* fp2 = fopen("buff.txt", "a");这一行代码,创建和打开一个中间缓冲文件,它默认创建在和运行程序同一个文件夹下面。我们自然希望它和原来被修改的文件等价,因此就把它放在和我们要修改的 1.txt同一个目录下。

之后利用:

1
2
remove(FileName);
rename("buff.txt", FileName);

两行代码将原来的文件删除以及对缓冲文件进行改名,就达到了修改的预期效果。

全文完,感谢阅读。


C语言实现删除匹配的某一行文本
http://blog.luliang.online/2023/02/24/C语言实现删除匹配的某一行文本/
作者
Luyoung
发布于
2023年2月24日
许可协议