PHP 文件系统 fscanf() 函数



PHP 文件系统fscanf()函数用于根据给定的格式解析来自打开文件的输入。此函数类似于sscanf()函数,但它可以从与句柄关联的文件中获取输入。

字符串格式中的任何空格都可以匹配输入流中的任何空格,这意味着字符串格式中的制表符\t甚至可以匹配输入流中的单个空格字符,并且每次调用fscanf()都可以读取文件中的一行。

语法

以下是PHP文件系统fscanf()函数的语法:

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

参数

以下是fscanf()函数的必需和可选参数:

序号 参数及说明
1

handle(必需)

文件系统指针的资源,通常以fopen()开头。

2

format(必需)

要解释的字符串格式。

3

vars(可选)

可选的赋值变量。

返回值

此函数的返回值取决于用法:

  • 如果成功地将值赋给格式中给定的变量,则返回已赋值的值的数量。
  • 如果读取失败或无法匹配格式,则返回 FALSE。

PHP 版本

fscanf()函数最初作为核心PHP 4.0.1的一部分引入,并且与PHP 5、PHP 7、PHP 8良好兼容。

示例

在这个PHP示例中,我们将使用PHP文件系统fscanf()函数从文件中读取两个值:姓名和年龄。请查看以下代码示例:

<?php
  $file = fopen("/PhpProject/Users.txt", "r");

  // Read data from the file
  fscanf($file, "%s %d", $name, $age);
  
  // Output the data
  echo "Name: $name, Age: $age";
  
  // Close the file
  fclose($file);
?>

输出

以下是上述PHP代码的输出:

Name: Nick, Age: 35

示例

在此代码中,我们将使用fscanf()函数从文件的一行中读取三个值。它将从文件句柄读取一行,并将值赋给变量$userinfo。

<?php
   $handle = fopen("/PhpProject/Users.txt", "r");
   while($userinfo = fscanf($handle, "%s\t%s\t%s\n")) {
      list($name, $profession, $countrycode) = $userinfo;
   }
   echo $name . "<br>";
   echo $profession . "<br>";
   echo $countrycode;
   
   fclose($handle);
?>

输出

以下是上述代码的结果:

Ravi
Lead
AUS

示例

假设"numbers.txt"包含以换行符分隔的整数。所以在下面的例子中,我们将读取每个整数,将其值加倍,然后打印结果。

<?php
   $file = fopen("/PhpProject/numbers.txt", "r");
   while ($num = fscanf($file, "%d\n")) {
      list($number) = $num;
      echo $number * 2 . "<br>";
   }
   fclose($file);
?> 

输出

这将产生以下结果:

6
10
14

示例

使用这样的思路:有三行数据——一个浮点数、一个整数和一个字符串,它们由制表符分隔。因此,这段代码将逐行读取"data.txt",提取值,然后打印正确的格式。

<?php
   $file = fopen("/PhpProject/data.txt", "r");
   while ($info = fscanf($file, "%s\t%d\t%f\n")) {
      list($name, $age, $salary) = $info;
      echo "Name: $name, Age: $age, Salary: $" . number_format($salary, 2) . "<br>";
   }
   fclose($file);
?> 

输出

这将产生以下结果:

Name: Sunil, Age: 25, Salary: 35,000.00
Name: Ajay, Age: 30, Salary: 45,000.00
Name: Bhavna, Age: 40, Salary: 55,000.00

示例

在此代码中,我们将读取每对字符串,使用ucfirst()将每个单词的首字母大写,然后将其打印为全名。

<?php
   $file = fopen("/PhpProject/Users.txt", "r");
   while ($data = fscanf($file, "%s %s\n")) {
      list($firstName, $lastName) = $data;
      echo ucfirst($firstName) . " " . ucfirst($lastName) . "<br>";
   }
   fclose($file);
?> 

输出

这将导致以下输出:

Sunil Sethi
Ajay Vishwas
Bhavna Sharma

总结

当处理文件中的结构化数据时,fscanf()非常有用,因为它简化了根据预设格式读取和解析数据的过程。

php_function_reference.htm
广告