Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 在没有断开字符串的情况下解析网页_Html_C_Parsing - Fatal编程技术网

Html 在没有断开字符串的情况下解析网页

Html 在没有断开字符串的情况下解析网页,html,c,parsing,Html,C,Parsing,我试图解析网页中的一些字符串,但我不断得到碰巧被打断的字符串,无法检查字符串是否完整。目前,我有一个1024字节的缓冲区,用来接收部分页面。我应该怎么做才能确保得到完整的字符串,最好不要有过大的缓冲区。我不能完全确定我是否理解您在做什么以及您所说的“断字符串”是什么意思,但我会尝试给您一个答案 通过断字符串,我假设您指的是一段HTML或文本的逻辑结尾。最终,你只能解析,如果你不在某个逻辑停止点,继续阅读。如果您使用char[]保存数据,那么肯定会遇到缓冲区问题。根据您在中读取数据的方式,方法可能

我试图解析网页中的一些字符串,但我不断得到碰巧被打断的字符串,无法检查字符串是否完整。目前,我有一个1024字节的缓冲区,用来接收部分页面。我应该怎么做才能确保得到完整的字符串,最好不要有过大的缓冲区。

我不能完全确定我是否理解您在做什么以及您所说的“断字符串”是什么意思,但我会尝试给您一个答案

通过断字符串,我假设您指的是一段HTML或文本的逻辑结尾。最终,你只能解析,如果你不在某个逻辑停止点,继续阅读。如果您使用char[]保存数据,那么肯定会遇到缓冲区问题。根据您在中读取数据的方式,方法可能会改变,但过程大致如下:

(有点C,技术上不准确)

现在,很明显,这忽略了确定字符串是否损坏的细节,但这仍然有待解释。有几种方法可以检查数据是否位于有效的结尾:查找空格字符、换行符等,或者检查HTML是否以[/HTML]标记终止。无论哪种方式,你都必须读取所有的数据集


我很想知道您是如何读取HTML数据的,以及您对“断字符串”的完整解释,但是,我会修改我的答案。

我想您想说的是,您的字符串并不总是以相同的缓冲区迭代结束。如果是这样的话,基本上有两种选择

  • 使用巨大的缓冲区。没有办法证明你不会错过任何机会,但这会大大降低机会
  • 如果知道要查找的字符串的最大长度,可以创建两个缓冲区。第一个保存您刚得到的当前部分,另一个保存前一部分。您需要知道字符串长度的原因是,缓冲区的大小至少需要是字符串的大小

  • 第二种解决方案是更好的解决方案,但它确实依赖于对字符串最大长度的了解。

    这与您的问题只存在切点关系,但您可能解决了错误的问题。多年来,我一直从网页上刮下HTML,试图获取某些字符串。在听说Firefox的扩展后,我意识到使用web浏览器将HTML转换为ASCII,然后使用标准机制(如or)刮取ASCII会容易得多。这个想法并不适用于所有的问题,但当它出现时,通常比删除HTML容易得多


    例如,我最近使用这种技术为一个家庭作业收集了超过200000首歌曲的歌词。

    嗨……你需要更精确一些。。。“断”线是什么意思?你说的解析是什么意思?只是提取?
    int allocLen = 1024;
    char buffer[] = malloc(allocLen);
    readInNBytes(buffer, 128);
    if (notAtLogicalEnd(buffer))
         realloc(buffer, allocLen *= 2);
    else
         // we're done?