【问题标题】:Which method to use in searching for a line in a file在文件中搜索行时使用哪种方法
【发布时间】:2012-02-09 10:13:24
【问题描述】:

我有一个带有文件路径名的文件:

/my/path1
/my/path11
/my/path12
/my/path13

文件结构是每行都有单独的路径。我要做的就是多次搜索上述文件中是否存在字符串/my/path1或任何其他内容

我可以想到两种方法。

  1. 每次逐行获取文件内容,然后搜索字符串。优点是文件可以是任意大小,我不需要担心缓冲区溢出。

  2. 将内容加载到缓冲区并使用缓冲区进行搜索。但由于我无法控制文件大小,所以在这里我应该谨慎。

最好的方法是什么?我在 unix 工作。我可以为此目的使用 C 中的任何内置库命令吗?或者如何在 C 代码中使用 awk 完成相同的任务。

【问题讨论】:

  • 你必须使用 C 并且不能只使用带有 sed/awk 的 execv 系列的系统命令?否则执行:sed -n '/pathtomatch/p' pathfile.txt

标签: c search fileparsing file-search


【解决方案1】:

如果你使用 stdio,它会为你做缓冲。您可以通过使用函数setvbuf 来更改其操作以缓冲多于一行。 getline可以用来逐行查看。

【讨论】:

  • getline 是 C++ 的一部分,不是吗?
  • 它是 stdio(GNU 扩展)-C 的一部分。见gnu.org/software/libc/manual/html_node/Line-Input.html 或者你可以使用 fgets
  • 哦,谢谢。我不知道这个功能。我读过man getline 并发现它非常有用。尤其是如果动态缓冲区不够大,无法获取所有字符串,它可以重新分配动态缓冲区。
【解决方案2】:

我认为将所有文件加载到内存中并不是一个好主意。我猜使用fgetsstrcmp 是最好的方法。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2017-01-20
    • 2018-10-23
    • 2014-11-24
    • 2011-10-01
    • 2013-05-04
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多