gpt4 book ai didi

c - 从文件中读取并设置偏移量?

转载 作者:行者123 更新时间:2023-11-30 15:18:27 28 4
gpt4 key购买 nike

我是 C 新手,我正在尝试构建一个 C 程序,该程序扫描文件直到 EOF,挑选出包含特定关键字的行,然后在搜索最后一行后设置偏移量。当再次执行扫描时,它会扫描文件,这次从保存的偏移量开始向下扫描,直到 EOF。

我正在尝试了解文件 I/O 的不同功能,但在拼凑调用 fopen()、fseek()、fgets()、ftell() 等的过程时遇到困难我想要它做什么。任何人都可以为我指明正确的方向,或者引导我完成完成此任务所需的步骤吗?

谢谢!

最佳答案

我建议使用 getline 进行读取,使用 ftellfseek 获取/设置偏移量(以及 strstr code> 用于搜索单个行)在您的情况下。

我不确定我是否理解您保存偏移量的意义,但它可能看起来像这样:

int pick_lines(const char *filename, const char *keyword, long *offset)
{
FILE *fp;
char *line = NULL;
size_t len = 0;

if (offset == NULL || (fp = fopen(filename, "r")) == NULL)
return 1;

if (*offset > 0 && fseek(fp, *offset, SEEK_SET) != 0) {
fclose(fp);
return 1;
}

while (getline(&line, &len, fp) != -1) {
if (strstr(line, keyword) != NULL)
printf("%s", line); // or do something else with chosen line
}

if ((*offset = ftell(fp)) < 0) {
free(line);
fclose(fp);
return 1;
}

free(line);
fclose(fp);
return 0;
}

这里offset是一个输入/输出参数。它的解引用值用于查找给定的偏移量(以 *offset == 0 开头),然后重置为新的偏移量。

这个函数只会打印包含关键字的每一行。如果您想返回一个行数组,则需要做一些额外的工作。

使用示例可能是:

long offset = 0;
pick_lines(filename, keyword, &offset);
// append lines to file
pick_lines(filename, keyword, &offset);
// ...

关于c - 从文件中读取并设置偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31474810/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com