如何使用ANSI C删除文件中的字符串?

时间:2012-03-28 14:00:40

标签: c string file-io

我正在尝试删除数据文件中的字符串。

数据格式就像以下记录一样:

4253 1

3119 1

5709 1

576 1

857 1

5859 1

5896 1

116 1

2396 1

1088 1

4180 1

这些是文件的一部分。我无权发送img。 每个记录由空格隔离的两个数字组成,并由不可见的char'\ n'隔离。 文件中有数千条记录,我只想删除一些扫描文件时无用的记录。应该使用C语言来实现它。

非常抱歉没有提供详细的数据格式。

1 个答案:

答案 0 :(得分:2)

C中的文件是顺序实体。除非你将自己的结构强加给它们(例如将NUL字符视为不存在的字符),删除字符或行的唯一真正方法是覆盖它们,将文件的一部分移到它们之后一点点朝前。

您可以使用fseektruncate(最后不是ISO C)或通过读取一个文件并写入另一个文件来就地执行此操作。

例如,以下程序将从标准输入中删除包含11的行:

#include <stdio.h>

int main (void) {
    char buff[1024];
    while (fgets (buff, sizeof(buff), stdin) != NULL)
        if (strcmp (buff, "11\n") != 0)
            printf ("%s", buff);
    return 0;
}

请注意通常的警告线条,这些线条对于输入缓冲区来说太长了。