搜索文件

时间:2015-04-22 23:28:32

标签: c file-io

我正在尝试创建一个程序来读取文件并搜索特定的字符组合。 例如:“/ start / 4jy42jygsfsf / end /”。

所以我想找到以/ start /开头并以/ end /.

结尾的所有“字符串”

为了做到这一点,我使用read()函数,因为该文件可能是一个二进制文件(它不一定是带有字符的文件)。

我将read()函数称为:

#define BUFFSIZE 4000

// more declarations

while (read(file_descriptor, buffer, BUFFSIZE) > 0)
{
    //search for /start/
    //then search for /end/
    //build a string with all the chars between these two
    //keep searching till you reach the end of buffer
}

假设每个/ start /之后是/ end /.

问题是:

如何处理将这些字符组合切成两半的情况?

例如,假设第一次调用read(),在此缓冲区的末尾我发现 / star ,下一次read()在第二次调用时被调用缓冲区有 t / 4jy42jygsfsf / end /

这种组合可能会在任何地方被削减。我认为解决方案会导致很多行代码。有没有聪明的方法来处理所有这些案件?

1 个答案:

答案 0 :(得分:0)

当您到达缓冲区的末尾时,记录当前部分匹配的状态(如果有)。然后当你得到下一个缓冲区时,你有4个一般情况:

  • 不在任何要匹配的文本中。
  • 在最后一个缓冲区的末尾看到了一个开头/
  • 目前位于/start/内。另一个变量记录了你匹配的距离。
  • 目前位于/end/内。与/start相同的变量/记录您匹配的距离。

匹配器内的状态通常是:

  1. 目前无法匹配任何内容
  2. 刚刚看到一个/ - 接下来正在寻找一个''或者是'。
  3. 匹配start/end/
  4. 已匹配 - /start/end
  5. 基于部分匹配,只需在匹配器中跳转到正确的状态。

    OR

    您可以使用PCRE library。它支持部分匹配。但对你的目的来说可能有点过分了。