ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fscanf

テキスト ファイルからのデータの読み取り

構文

A = fscanf(fileID, format)
A = fscanf(fileID, format, sizeA)
[A, count] = fscanf(...)

説明

A = fscanf(fileID, format) は、データをテキスト ファイルから読み取り、そのデータを列順に配列 A に変換します。関数 fscanf は、変換用にそのファイルに関連付けられている format とエンコード スキームを使用します。エンコード スキームを設定するには、関数 fopen を使用します。関数 fscanf は、ファイル全体を通じて format を再度適用し、ファイル ポインターをファイルの終端マーカーに配置します。関数 fscanf が、format をデータに一致できない場合、A に一致する部分のみを読み込み、処理を停止します。

A = fscanf(fileID, format, sizeA) は、sizeA 要素を A に読み取り、ファイル ポインターを読み取られた最後の要素の後に配置します。sizeA は、整数である場合、または [m,n] の形式である場合があります。

[A, count] = fscanf(...) は、fscanf が問題なく読み取った要素の数を返します。

入力引数

fileID

関数 fopen から取得される整数のファイル識別子。

format

要素 (フィールド) の各タイプを記述する単一引用符に囲まれた文字列。以下の指定子の 1 つまたは複数を含みます。

フィールド タイプ指定子詳細

整数、符号付き

%d

基数 10

%i

値から判別される基数。既定では基数 10 になります。最初の数字が 0x または 0X の場合は基数 16 です。最初の数字が 0 の場合は基数 8 です。

%ld または %li

64 ビットの値、基数 10、8、16

整数、符号なし

%u

基数 10

%o

基数 8 (8 進法)

%x

基数16 (16 進法)

%lu, %lo, %lx

64 ビットの値、基数 10、8、16

浮動小数点数

%f

浮動小数点フィールドには、次のどれでも含めることができます (大文字と小文字の区別なし)。Inf-InfNaN-NaN

%e

%g

文字列

%s

空白が出現するまで一連の文字を読み込みます。

%c

空白も含め、1 つの文字を読み込みます
(複数の文字を読み込むには、フィールド長を指定します)。

%[...]

最初の一致しない文字または空白が出現するまで、中かっこ内の文字のみを読み込みます。

オプションで

  • フィールドをスキップするには、パーセント記号 (%) の後にアスタリスク (*) を挿入します。たとえば、整数をスキップするには、%*d を指定します。

  • フィールドの最大幅を指定するには、数字を入力します。たとえば、%10c は空白も含め一度に 10 文字を読み込みます。

  • 特定の文字セットをスキップするには、形式にリテラル文字を挿入します。たとえば、'pi=3.14159' から浮動小数点数のみを読み込むには、'pi=%f'形式を指定します。

sizeA

出力配列 A の次元。以下のいずれかの形式を指定します。

inf

ファイルの最後まで読み込みます (既定の設定)

n

最大 n 個の要素まで読み込みます。

[m,n]

列順に最大 m*n の要素まで読み込みます。ninf にすることができますが、m はできません。

format%s がある場合、A には n 列以上の列を含むことができます。n は、文字ではなく、要素を表します。

出力引数

A

配列。形式に含まれる値が、

  • 数値指定子のみの場合、A は数値です。format に 64 ビットの符号付き整数指定子のみが含まれる場合、A のクラスは int64 です。同様に、format に 64 ビットの符号なし整数指定子のみが含まれる場合、A のクラスは uint64 です。それ以外の場合、A はクラス double です。sizeAinf または n の場合、A は列のベクトルです。入力に含まれている要素が sizeA より少ない場合、MATLAB®A をゼロでパディングします。

  • 文字または文字列指定子のみの場合 (%c または %s)、A は文字の配列です。sizeAinf または n の場合、A は行のベクトルです。入力に含まれている要素が sizeA 文字より少ない場合、MATLAB は Achar(0) でパディングします。

  • 数値と文字の指定子の組み合わせの場合、A はクラス double の数値です。MATLAB は各文字をそれに相当する数値に変換します。この変換は、形式 がすべての数値を明示的にスキップする (たとえば、'%*d %s'形式) 場合でも発生します。

MATLAB が形式への入力を照合できず、形式に数値と文字の両方の指定子が含まれている場合、A は数値または文字です。A のクラスは、処理が終了する前に MATLAB が読み込む値によって異なります。

count

関数 fscanfA に読み込む要素の数。

ファイルの内容を読み込みます。以下の例では、関数 fscanf は、ファイル全体を通して format を再利用するため、ループを制御する必要はありません。

% Create a file with an exponential table
x = 0:.1:1;
y = [x; exp(x)];

fid = fopen('exp.txt', 'w');
fprintf(fid, '%6.2f %12.8f\n', y);
fclose(fid);

% Read the data, filling A in column order
% First line of the file:
%    0.00    1.00000000

fid = fopen('exp.txt');
A = fscanf(fid, '%g %g', [2 inf]);
fclose(fid);

% Transpose so that A matches
% the orientation of the file
A = A';
 

以下の例では、ファイル内の特定の文字をスキップし、数値のみを返します。

% Create a file with temperatures
tempstr = '78°F 72°F 64°F 66°F 49°F';

fid = fopen('temperature.dat', 'w+');
fprintf(fid, '%s', tempstr);

% Return to the beginning of the file
frewind(fid);

% Read the numbers in the file, skipping the units
% num_temps is a numeric column vector

degrees = char(176);
num_temps = fscanf(fid, ['%d' degrees 'F']);

fclose(fid);

詳細

すべて展開する

ヒント

  • 関数 sscanf および fscanf の読み取りに対する形式指定子は、関数 sprintf および fprintf の書き込み用の形式とは異なります。読み取り関数は精度フィールドをサポートしません。幅フィールドは、書き込み用には最小値を、読み取り用には最大値を指定します。

参考

| | | | | | | | |

この情報は役に立ちましたか?