如何使用fscanf读取整行(字符串)?

时间:2016-04-03 18:56:30

标签: php string format scanf

我有一个文本文件,我正在逐行阅读。当我到达一个字符串(长度为六个字)的行时,我想读取它并将其分配给变量$ str,所以我这样做:

fscanf($handle, "%s", $str);

//The line is "one two three four"

echo $str ; // prints out "one"

但是,由于每个单词后面的空格,它只保存字符串的第一个单词。我如何捕获整个事物?

3 个答案:

答案 0 :(得分:2)

这是老问题,但对于googlers来说:

  

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

来自PHP fscanf vs fgets

答案 1 :(得分:0)

我希望以下代码段有效,

<?php
$handle = fopen("users.txt", "r");
while ($userinfo = fscanf($handle, "%s\t%s\t%s\n")) {
    list ($name, $profession, $countrycode) = $userinfo;
    //... do something with the values
}
fclose($handle);
?>

答案 2 :(得分:-1)

如果输入字符串包含字符“n”,

有时 fscanf 将不会读取整行。因此,最好使用“%[^]”通过 fscanf

读取PHP中的整行