Php/docs/function.fscanf

提供:Dev Guides
< Php
移動先:案内検索

fscanf

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

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


説明

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

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

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

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


パラメータ

handle

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

format

0個以上のディレクティブで構成されるフォーマット文字列: 変換結果に直接コピーされる通常文字列 (% は除きます) と、変換仕様。 これらのいずれも、自分が持つパラメータを取得します。

変換の仕様は、以下のプロトタイプに従います: %[argnum$][flags][width][.precision]specifier.

Argnum

何個の引数を変換の対象にするかを指定するために、 数値の後にドル記号 $ を続けます。

フラグ一覧
フラグ 説明
- 与えられたフィールドの幅を左寄せにします。

右寄せがデフォルトです。

+ 正の数値の前に付ける + 符号です;

デフォルトは、負の数にだけマイナスの符号が数値の前に付きます。

(space) スペースに変換される詰め物です。

これがデフォルトです。

0 数値の左側を0埋めします。

s 指定子を使うと、 右側にも0埋めできます。

'(char) 指定された (char) で埋めます。
Width

(最小で)何文字がこの変換結果に含まれるかを数値で指定します。

Precision

ピリオド . の後に数値を続けますが、 その意味は指定子に依存します:

  • e, E, fF 指定子の場合: 小数点の後に表示する桁数 (デフォルトでは、この値は6です)
  • gG 指定子の場合: 表示する最大の有効桁数
  • s 指定子の場合: 文字列を切り捨てる時点、つまり、文字列の最大の長さを設定します。

注意:

明示的に精度を指定せず、ピリオドを指定した場合、精度は0として扱われます。

注意:

位置を示す指定子に、PHP_INT_MAX を超える値を指定すると、警告が発生します。

指定子の一覧
指定子 説明
% 文字通り、パーセント文字です。

引数は不要です。

b 引数は数値として扱われ、バイナリ値として表現されます。
c 引数は数値として扱われ、ASCII文字として表現されます。
d 引数は数値として扱われ、(符号付き)小数値として表現されます。
e 引数は科学的記法で表現された値(e.g. 1.2e+2)として扱われます。

PHP 5.2.1 以降では、precision 指定子が小数点以降の桁数を表します。 それより前のバージョンでは、(ひと桁少ない) 有効桁数として解釈されていました。

E e 指定子に似ていますが、

大文字を使います(e.g. 1.2E+2)

f 引数は小数として扱われ、浮動小数値として表現されます(ロケールを考慮します)。
F 引数は小数として扱われ、浮動小数値として表現されます(ロケールを考慮しません)。

PHP 5.0.3 以降で利用可能です

g

汎用フォーマット

P を精度を表す、ゼロでない値とします。 精度が省略された場合、Pの値は6です。 精度に0を指定した場合、Pの値は1になります。 この場合、 E 指定子の変換結果は、 X乗になります。

P > X ≥ −4 の場合、E 指定子の変換結果となり、精度は、P − (X + 1) になります。 そうでない場合、e 指定子の変換結果となり、 精度は、P - 1 になります。

G g 指定子に似ていますが、

Ef を使います。

o 引数は数値として扱われ、8進数値として表現されます。
s 引数は文字列として扱われ、文字列として表現されます。
u 引数は数値として扱われ、符号なし小数値として表現されます。
x 引数は数値として扱われ、16進数値(小文字)として表現されます。
X 引数は数値として扱われ、16進数値(大文字)として表現されます。

警告

c 指定子はパディングと幅を無視します

警告

文字列と width 指定子を、1文字の表現に1バイト以上必要な文字セットと一緒に使おうとすると、 期待しない結果になるかもしれません。

値は、指定子の型に合うように強制されます:

型のハンドリング
指定子
string s
integer d,

u, c, o, x, X, b

double g,

G, e, E, f, F

vars

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


返り値

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


例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() - フォーマットされた文字列を返す