请教怎么删除文件中的指定行
请问如何删除文件中的指定行?
假设要打开一个 500MB 的文本文件,通过以下函数要删除文件中的含有指定字串的行:
请问该如何实现函数 delete_line?
------解决方案--------------------
假设要打开一个 500MB 的文本文件,通过以下函数要删除文件中的含有指定字串的行:
- C/C++ code
delete_line(FILE* pFile, const char* pString) { } main() { FILE* pFile = fopen("xxxxxx", "rb+); //or r+? delete_line(pFile, "## DEL STR ##"); //如果某行含有字串 "## DEL STR ##",则删除该行. }
请问该如何实现函数 delete_line?
------解决方案--------------------
- C/C++ code
#include<stdio.h> #include<string.h> void help(); // 调用使用帮助 #define LINE_SIZE 255 int main(int argc, char* argv[]) { if ((1 == argc) || (2 == argc)) { //错误输入处理 help(); return -1; } FILE* input = fopen(argv[2], "r"); // 数据输入文件 if (ferror(input)) { printf("文件错误:不能打开输入文件: %s \n", argv[2]); help(); return -1; } FILE* outfile; if (3 < argc) // 如果没有输出文件,输出到屏幕 outfile = fopen(argv[3], "w"); // 输出结果文件 else outfile = stdout; char line[LINE_SIZE]; // 读取一行 字符串 char* ps; char* Value = argv[1]; printf("正在搜索文件: %s ...........\a\n", argv[2]); while (fgets(line, LINE_SIZE , input)) { // 读取每一行 if (ps = strstr(line, Value)) { // strstr 功能:返回一个指针,它指向字符串中首次出现于Value中的位置,如果没有找到,返回NULL ps = line; // ps 恢复到行首 fputs(ps , outfile); // 输出结果 } } return 0; } void help() { printf("本工具可以从文件中按关键字搜索数据行 [C语言版本] BY Hong Wenjun\n\n"); printf("示例 1 :D:\\>LineExtraction.exe \"关键字\" D:\\原始数据.txt \n"); printf("示例 2 :D:\\>LineExtraction.exe \"关键字\" D:\\原始数据.txt D:\\数据结果.txt\n"); printf("\n输出文件不填,结果显示在屏幕上\a\n"); }
------解决方案--------------------
先读取整行,看有没有"## DEL STR ##",有的话就删除。
读取一行可使用fgets()或者判断回车换行符\r\n.
------解决方案--------------------
首先是找到那一行,然后让文件指针指向改行,对改行写入其他信息,或者写入空格覆盖。