Main Content

fscanf

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

説明

A = fscanf(fileID,formatSpec) は、開いたテキスト ファイルからデータを列ベクトル A に読み取り、formatSpec で指定された形式に従ってファイルの値を解釈します。関数 fscanf は、ファイル全体を通じてその形式を再度適用し、ファイル ポインターをファイルの終端マーカーに配置します。関数 fscanf がデータを formatSpec に一致させられない場合、一致する部分のみを読み取り、処理を停止します。

テキスト ファイルはファイル識別子 fileID で示されます。fopen を使用してファイルを開き、文字エンコードを指定して fileID 値を取得します。読み取りが終わったら、fclose(fileID) を呼び出してファイルを閉じます。

A = fscanf(fileID,formatSpec,sizeA) は、次元が sizeA の配列 A にファイル データを読み取り、読み取られた最後の値の後にファイル ポインターを配置します。fscanfA にデータを列順に入力します。sizeA は正の整数であるか、[m n] の形式でなければなりません。ここで mn は正の整数です。

[A,count] = fscanf(___) は、fscanfA に読み取ったフィールド数を追加で返します。数値データの場合、これは読み取った値の数になります。この構文では、前述の構文の入力引数のいずれかを使用できます。

すべて折りたたむ

浮動小数点数を含むサンプル テキスト ファイルを作成します。

x = 100*rand(8,1);
fileID = fopen('nums1.txt','w');
fprintf(fileID,'%4.4f\n',x);
fclose(fileID);

ファイルの内容を表示します。

type nums1.txt
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882

読み取り用にファイルを開き、ファイル識別子 fileID を取得します。

fileID = fopen('nums1.txt','r');

読み取るデータの形式を定義します。'%f' を使用して、浮動小数点数を指定します。

formatSpec = '%f';

ファイル データを読み取り、出力配列 A を列順に埋めます。fscanf は形式 formatSpec をファイル全体に再度適用します。

A = fscanf(fileID,formatSpec)
A = 8×1

   81.4724
   90.5792
   12.6987
   91.3376
   63.2359
    9.7540
   27.8498
   54.6882

A は、ファイルのデータを含む列ベクトルになります。

ファイルを閉じます。

fclose(fileID);

整数および浮動小数点数を含むサンプル テキスト ファイルを作成します。

x = 1:1:5;
y = [x;rand(1,5)];
fileID = fopen('nums2.txt','w');
fprintf(fileID,'%d %4.4f\n',y);
fclose(fileID);

ファイルの内容を表示します。

type nums2.txt
1 0.8147
2 0.9058
3 0.1270
4 0.9134
5 0.6324

読み取り用にファイルを開き、ファイル識別子 fileID を取得します。

fileID = fopen('nums2.txt','r');

読み取るデータの形式と出力配列の形状を定義します。

formatSpec = '%d %f';
sizeA = [2 Inf];

ファイル データを読み取り、出力配列 A を列順に埋めます。fscanf は形式 formatSpec をファイル全体に再利用します。

A = fscanf(fileID,formatSpec,sizeA)
A = 2×5

    1.0000    2.0000    3.0000    4.0000    5.0000
    0.8147    0.9058    0.1270    0.9134    0.6324

fclose(fileID);

A がファイル内のデータの向きと一致するように、配列を転置します。

A = A'
A = 5×2

    1.0000    0.8147
    2.0000    0.9058
    3.0000    0.1270
    4.0000    0.9134
    5.0000    0.6324

サンプル ファイル内の特定の文字をスキップし、数値データのみを返します。

温度の値を含むサンプル テキスト ファイルを作成します。

str = '78°C 72°C 64°C 66°C 49°C';
fileID = fopen('temperature.dat','w');
fprintf(fileID,'%s',str);
fclose(fileID);

テキスト「°C」をスキップしてファイルの数値を読み取ります。また、fscanf が読み取った値の数も返します。拡張 ASCII コード 176 は、度の記号を表します。

fileID = fopen('temperature.dat','r');
degrees = char(176);
[A,count] = fscanf(fileID, ['%d' degrees 'C'])
fclose(fileID);
A =

    78
    72
    64
    66
    49


count =

     5

A は、ファイル内の数値を含むベクトルになります。countfscanf が 5 つの値を読み取ったことを示します。

入力引数

すべて折りたたむ

開いているテキスト ファイルのファイル識別子。整数として指定します。fscanf でファイルを読み取る前に、fopen を使用してファイルを開き、fileID を取得しなければなりません。

データ型: double

ファイルのデータ フィールドの形式。1 つ以上の変換指定子の文字ベクトルまたは string スカラーとして指定します。fscanf はファイルを読み取るときに、formatSpec で指定された形式にデータを一致させようとします。

数値フィールド

この表は、数値入力に使用できる変換指定子の一覧です。fscanf は値を 10 進数 (基数 10) 表現に変換します。

数値フィールド タイプ変換指定子詳細

整数、符号付き

%d

基数 10

%i

ファイルの値により基数が決定されます。

  • 既定の設定は基数 10 です。

  • 最初の数字が 0x または 0X の場合、値は 16 進数 (基数 16) になります。

  • 最初の数字が 0 の場合、値は 8 進数 (基数 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

文字フィールド

この表は、文字入力用に使用可能な変換指定子をまとめたものです。

文字フィールド タイプ変換指定子説明

文字ベクトルまたは string スカラー

%s

空白を除くすべての文字を読み取ります。

%c

空白も含め、任意の 1 文字を読み取ります。
一度に複数の文字を読み取るには、フィールド幅を指定します。

パターンマッチング

%[...]

大かっこ内の文字のみを、不一致文字または空白に達するまで読み込みます。

例: %[mus]'summer ''summ' として読み取ります。

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

オプションの演算子

  • 無視するフィールドと文字

    fscanf は、特定のフィールドまたはフィールドの一部を無視するように指示していない限り、ファイルのすべての数値および文字を順番に読み取ります。フィールドをスキップするには、パーセント記号 (%) の後にアスタリスク (*) を挿入します。たとえば、整数をスキップするには、%*d を指定します。

  • フィールド幅

    一度に読み取る桁またはテキスト文字の最大数を指定するには、パーセント文字の後に数値を挿入します。たとえば、%10c は一度に最大 10 文字 (空白を含む) を読み取ります。%4f は、一度に最大 4 桁 (小数点を含む) を読み取ります。

  • 無視するリテラル テキスト

    fscanfformatSpec 変換指定子に追加指定されたテキストを無視します。

    例: Level%u'Level1'1 として読み取ります。

    例: %uStep'2Step'2 として読み取ります。

出力配列 A の次元。Inf、整数 または 2 要素の行ベクトルとして指定します。

入力 sizeA の形式説明
Infファイルの最後まで読み込みます
数値データの場合、出力 A は列ベクトルになります。
テキスト データの場合、A は文字ベクトルになります。
n最大 n 個の数値または文字フィールドを読み取ります。
数値データの場合、出力 A は列ベクトルになります。
テキスト データの場合、A は文字ベクトルになります。
[m,n]最大 m*n 個の数値または文字フィールドを読み取ります。n には Inf を指定できますが、m には指定できません。出力 A は、mn 列で、列順に埋められます。

出力引数

すべて折りたたむ

ファイル データ。列ベクトル、行列、文字ベクトルまたは文字配列として返されます。A のクラスおよびサイズは、formatSpec 入力に依存します。

  • formatSpec に数値指定子のみが含まれる場合、A は数値になります。sizeA 引数を指定した場合、A は指定されたサイズの行列になります。それ以外の場合は、A は列ベクトルになります。入力に含まれている要素が sizeA 値より少ない場合、fscanfA を 0 でパディングします。

    • formatSpec に 64 ビットの符号付き整数指定子のみが含まれる場合、A のクラスは int64 になります。

    • formatSpec に 64 ビットの符号なしの整数指定子のみが含まれる場合、A のクラスは uint64 になります。

    • それ以外の場合、A はクラス double です。

  • formatSpec に文字またはテキスト指定子 (%c または %s) のみが含まれる場合、A は文字配列になります。sizeA を指定した際に、入力の文字数がそれより少ないと、fscanfAchar(0) でパディングします。

  • formatSpec に数値と文字の指定子の組み合わせが含まれる場合、A はクラス double の数値になり、fscanf は各テキスト文字をそれに相当する数値に変換します。この変換は、formatSpec がすべての数値フィールドを明示的にスキップする場合 (たとえば、formatSpec'%*d %s' の場合など) でも発生します。

  • MATLAB® がファイル データを formatSpec と照合できない場合、A は数値または文字配列になります。A のクラスは、処理が終了する前に fscanf が読み取る値によって異なります。

読み取られた文字数。スカラー値として返されます。

ヒント

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

アルゴリズム

MATLAB は、ファイルに関連付けられたエンコード スキームを使用して文字を読み取ります。関数 fopen を使用してファイルを開く際に、エンコードを指定します。

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する