fscanf

関数の概要

PHPの fscanf 関数は、ファイルポインタからデータを読み取り、指定した書式に基づいて変数に格納するための便利な関数です。テキストファイルなどから数値や文字列を整形された形で読み込みたいときに活用されます。C言語の fscanf と似た動作をし、ファイル内のデータを書式に合わせて効率よく取得できます。

パラメータの説明

  • resource $stream – 読み込み対象のファイルポインタ。fopenなどで開いたファイルリソースを指定します。
  • string $format – データの書式指定文字列。対象のデータ形式に合わせて指定し、変数へ正しく読み込むためのパターンを記述します。
  • mixed &...$vars – 読み込んだ内容を格納する変数。書式指定の順に値が代入されます。

戻り値

ファイルから1セットのデータを正しく読み込んだ場合は読み込んだフィールド数が返されます。読み込めなかった場合やファイルの終端に達した場合は NULL または FALSE を返します。

使用例

基本的な使い方

<?php
$fp = fopen('data.txt', 'r');
if ($fp) {
    fscanf($fp, "%s %d", $name, $age);
    echo "名前: $name, 年齢: $age";
    fclose($fp);
}
?>

この例では、data.txtというファイルから名前(文字列)と年齢(整数)を読み込んでいます。ファイルの内容が、例えば Tanaka 28 のようになっている場合に適しています。

複数行から繰り返し読み込む例

<?php
$fp = fopen('members.txt', 'r');
if ($fp) {
    while (($num = fscanf($fp, "%s %d")) !== null) {
        list($name, $age) = $num;
        echo "{$name}さんは{$age}歳です。n";
    }
    fclose($fp);
}
?>

members.txtに複数のデータ行がある場合、1行ずつ名前と年齢の組み合わせを読み込みながら繰り返すことができます。ファイルの終わりまで処理が続きます。

浮動小数点数も含めて読み込む例

<?php
$fp = fopen('data2.txt', 'r');
if ($fp) {
    while (fscanf($fp, "%s %d %f", $item, $count, $price) !== false) {
        echo "商品: $item, 個数: $count, 価格: $pricen";
    }
    fclose($fp);
}
?>

数値の中に整数や浮動小数点数が混在する場合も、書式指定子を使い分けて一行ずつ正しく値を取得できます。

関連する関数

  • fopen – ファイルを開く
  • fgets – ファイルから1行読み込む
  • fgetc – ファイルから1文字読み込む
  • fgetcsv – CSVフォーマットのファイルから読み込む
  • sscanf – 文字列から書式指定で読み込む(ファイル以外)

まとめ

fscanf はファイルからフォーマットを指定してデータを安全かつ効率的に読み込みたいときに役立つ関数です。特に決まった形式のテキストデータを扱う場合に、手動でパース処理を書く手間を省くことができます。読み込みデータの型や順序を明確にできるため、ファイル操作を正確に行いたい初心者から中級者にもおすすめです。