【问题标题】:PHP fscanf vs fgetsPHP fscanf 与 fgets
【发布时间】:2016-06-10 07:45:11
【问题描述】:

我可以使用fgets() 读取一行中的整个字符串,但fscanf() 没有这样做。

根据PHP手册

fscanf — 根据格式解析来自文件的输入

函数fscanf() 类似于sscanf(),但它从与句柄关联的文件中获取输入,并根据sprintf() 的文档中描述的指定格式解释输入。

fgets — 从文件指针获取行

从文件指针中获取一行。

由于fscanf() 支持上述格式,我可以使用%s 读取整行,但它只能读取一个单词。

【问题讨论】:

    标签: php fgets scanf


    【解决方案1】:

    fscanf()sscanf() 的 PHP 文档不完整。格式与printf() 使用的格式相似,但并不完全相同。当您打印时,%s 将打印任何字符串,但当您扫描时,它只会读取一个单词。要获得更完整的信息,您需要阅读C fscanf() 函数的文档。其中一些信息也在文档网页的 cmets 部分中。

    要使用fscanf() 读取整行,请使用"%[^\\n]"。在fscanf() 中,$[^characters] 表示匹配不在括号之间的集合中的任何字符序列(类似于正则表达式中的[^characters]*)。所以这匹配除换行符以外的任何字符序列。见http://php.net/manual/en/function.sscanf.php#56076

    【讨论】:

    • 谢谢你成功了,但我尝试了 %[^ \ ] 并且它仍然有效,所以需要 \n 有什么需要。跨度>
    • 括号应该包含至少一个要排除的字符。也许它可以在 PHP 中工作,因为即使您没有明确说明,它也会在行尾自动停止。
    • 根据 PHP 手册每次调用 fscanf() 都会从文件中读取一行。
    猜你喜欢
    • 2014-04-15
    • 2012-02-13
    • 2023-03-24
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多