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
廣告