fscanf()

1. 定义

以特定格式来匹配已打开的文件句柄中的一行字符串,每个格式按空白符(包括制表符)隔开,最后返回按格式解析后的数组结果。

2. 语法

fscanf ( resource $handle , string $format [, mixed &$... ] ) : mixed

3. 参数说明

参数 可选性 数据类型 描述
$handle 必需 资源类型 文件句柄,通过fopen()函数打开的文件资源
$format 必需 字符串 参数格式,例如%s\t%d
... 可选 mixed 通过引用传递的可选参数,如果加上这个参数,则返回被赋值的数目

其中$format的格式为:%[flags][width][.precision]specifier

flags的值有五种:

  • -:表示输出时为左对齐,默认为右对齐
  • +:用加号+前缀正数;默认仅为负数,前缀为负号
  • 空格:默认用空格填充结果(位数)
  • 0:左边的数字使用0填充,如果是字符串也可以用0填充右边的内容
  • ':使用单引号包裹的字符,可以被用来填充结果

width表示允许最长输出的位数。

precision根据标识符的不同含义也不同:

  • 对于eEfF标识符来说,该值表示小数点后保留的位数
  • 对于gG标识符来说,该值表示允许被输出的最大有效位数
  • 对于s标识符来说,该值表示允许被输出的最大字符数
specifier标识符 说明
% 字面量百分号
b 二进制整数
c ASCII码字符
d 带符号(正负号)的十进制整数
e 科学计数法数
E 使用大写字母E表示的科学计数法
f 带本地属性的浮点数
F 不带本地属性的浮点数
g 总位数超过14位时,将转为科学计数法(E)表达,后面的值被忽略
G g一样
o 十进制整数
s 字符串
u 无符号十进制整数
x 小写形式的十六进制整数
X 大写形式的十六进制整数

4. 示例

<?php

// fscanf()
// 以特定格式来匹配已打开的文件句柄中的一行字符串,每个格式按**空白符**(包括制表符)隔开,最后返回按格式解析后的数组结果

file_put_contents(__DIR__.'/test.txt', "
01. jisudev.com
02. 极速教程
03. 当前位置:PHP");

$handle = fopen(__DIR__.'/test.txt', 'r');
if($handle){
    while (!feof($handle)) {
        $res = fscanf($handle, "%5d. %s");
        var_dump($res);
    }
    fclose($handle);
}else {
    echo '打开文件失败!';
}
/* 输出:
NULL
array(2) {
  [0]=>
  int(1)
  [1]=>
  string(11) "jisudev.com"
}
array(2) {
  [0]=>
  int(2)
  [1]=>
  string(12) "极速教程"
}
array(2) {
  [0]=>
  int(3)
  [1]=>
  string(18) "当前位置:PHP"
}
*/

5. 延展阅读

  • fread():读取指定长度的通过fopen()函数打开的文件内容
  • fgets():从文件指针处读取一行字符,直到遇到换行符、文件末尾或者函数参数列表中指定的长度($length - 1)后停止
  • fgetss():从打开的文件句柄中读取一行字符,并尝试过滤掉 HTML 和 PHP 标签,直到遇到换行符、文件末尾或者函数参数列表中指定的长度($length - 1)后停止
  • sscanf():根据指定格式解析字符串
  • printf():将字符串按某种特定格式输出
  • sprintf():返回被格式化后的字符串