fscanf

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

fscanfフォーマットに基づきファイルからの入力を処理する

説明

fscanf(resource $stream, string $format, mixed &...$vars): array|int|false|null

関数fscanf()sscanf() に似ていますが、stream が指すファイルから入力を取得し、 指定したフォーマット format に基づき解釈を行います。

フォーマット文字列におけるあらゆる空白は 入力ストリームのあらゆる空白にマッチします。 これはつまりフォーマット文字列のタブ (\t) すらも 入力ストリームの空白1個にマッチしてしまうことを意味します。

fscanf() をコールするたびに、ファイルから 1 行ずつ読み込みます。

パラメータ

stream

fopen() を使用して作成したファイルシステムポインタリソース。

format

string を解釈するフォーマット。 sprintf() のドキュメントにある説明と比べて、以下の違いがあります。

  • ロケールに対応していません。
  • FgG および b はサポートしていません。
  • D は十進数値を表します。
  • i は基数検出つきの整数値を表します。
  • n は処理する文字数を表します。
  • s は、空白文字を読み取ると停止することを示します。
  • argnum$ の代わりに * を指定すると、 この変換仕様に従った値の代入を抑制します。

vars

オプションで代入する値。

戻り値

この関数のパラメータが二つだけの場合、処理された値は配列として返されます。 他方、オプションのパラメータが指定された場合、 この関数は、代入された値の数を返します。 オプション引数は参照渡しとする必要があります。

string で利用可能な部分文字列よりも、 format で期待された部分文字列の数が多い場合は、null が返されます。 その他のエラーが発生した場合は、false が返されます。

例1 fscanf() の例

<?php
$handle 
fopen("users.txt""r");
while (
$userinfo fscanf($handle"%s\t%s\t%s\n")) {
    list (
$name$profession$countrycode) = $userinfo;
    
//... これらの値を使用して何か行う
}
fclose($handle);
?>

例2 users.txt の内容

javier  argonaut        pe
hiroshi sculptor        jp
robert  slacker us
luigi   florist it

参考

  • fread() - バイナリセーフなファイルの読み込み
  • fgets() - ファイルポインタから 1 行取得する
  • fgetss() - ファイルポインタから 1 行取り出し、HTML タグを取り除く
  • sscanf() - フォーマット文字列に基づき入力を処理する
  • printf() - フォーマット済みの文字列を出力する
  • sprintf() - フォーマットされた文字列を返す

関連キーワード:  フォーマット, 入力, 処理, fscanf, ファイル, format, 関数, 空白, パラメータ, ポインタ