このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
fscanf
テキスト ファイルからのデータの読み取り
説明
A = fscanf(
は、開いたテキスト ファイルからデータを列ベクトル fileID
,formatSpec
)A
に読み取り、formatSpec
で指定された形式に従ってファイルの値を解釈します。関数 fscanf
は、ファイル全体を通じてその形式を再度適用し、ファイル ポインターをファイルの終端マーカーに配置します。関数 fscanf
がデータを formatSpec
に一致させられない場合、一致する部分のみを読み取り、処理を停止します。
テキスト ファイルはファイル識別子 fileID
で示されます。fopen
を使用してファイルを開き、文字エンコードを指定して fileID
値を取得します。読み取りが終わったら、fclose(fileID)
を呼び出してファイルを閉じます。
A = fscanf(
は、次元が fileID
,formatSpec
,sizeA
)sizeA
の配列 A
にファイル データを読み取り、読み取られた最後の値の後にファイル ポインターを配置します。fscanf
は A
にデータを列順に入力します。sizeA
は正の整数であるか、[m n]
の形式でなければなりません。ここで m
と n
は正の整数です。
例
ファイルの内容の列ベクトルへの読み取り
浮動小数点数を含むサンプル テキスト ファイルを作成します。
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
は、ファイル内の数値を含むベクトルになります。count
は fscanf
が 5 つの値を読み取ったことを示します。
入力引数
fileID
— ファイル識別子
整数
開いているテキスト ファイルのファイル識別子。整数として指定します。fscanf
でファイルを読み取る前に、fopen
を使用してファイルを開き、fileID
を取得しなければなりません。
データ型: double
formatSpec
— データ フィールドの形式
文字ベクトル | string スカラー
ファイルのデータ フィールドの形式。1 つ以上の変換指定子の文字ベクトルまたは string スカラーとして指定します。fscanf
はファイルを読み取るときに、formatSpec
で指定された形式にデータを一致させようとします。
数値フィールド
この表は、数値入力に使用できる変換指定子の一覧です。fscanf
は値を 10 進数 (基数 10) 表現に変換します。
数値フィールド タイプ | 変換指定子 | 詳細 |
---|---|---|
整数、符号付き |
| 基数 10 |
| ファイルの値により基数が決定されます。
| |
| 64 ビットの値、基数 10、8、16 | |
整数、符号なし |
| 基数 10 |
| 基数 8 (8 進法) | |
| 基数16 (16 進法) | |
| 64 ビットの値、基数 10、8、16 | |
浮動小数点数 | | 浮動小数点フィールドには、次のどれでも含めることができます (大文字と小文字の区別なし)。 |
| ||
|
文字フィールド
この表は、文字入力用に使用可能な変換指定子をまとめたものです。
文字フィールド タイプ | 変換指定子 | 説明 |
---|---|---|
文字ベクトルまたは string スカラー |
| 空白を除くすべての文字を読み取ります。 |
| 空白も含め、任意の 1 文字を読み取ります。 | |
パターンマッチング |
| 大かっこ内の文字のみを、不一致文字または空白に達するまで読み込みます。 例: |
formatSpec
に数値と文字の指定子の組み合わせが含まれる場合、fscanf
は各文字をそれに相当する数値に変換します。この変換は、形式がすべての数値を明示的にスキップする場合 (たとえば、formatSpec
が '%*d %s'
の場合など) でも発生します。
オプションの演算子
無視するフィールドと文字
fscanf
は、特定のフィールドまたはフィールドの一部を無視するように指示していない限り、ファイルのすべての数値および文字を順番に読み取ります。フィールドをスキップするには、パーセント記号 (%
) の後にアスタリスク (*
) を挿入します。たとえば、整数をスキップするには、%*d
を指定します。フィールド幅
一度に読み取る桁またはテキスト文字の最大数を指定するには、パーセント文字の後に数値を挿入します。たとえば、
%10c
は一度に最大 10 文字 (空白を含む) を読み取ります。%4f
は、一度に最大 4 桁 (小数点を含む) を読み取ります。無視するリテラル テキスト
fscanf
はformatSpec
変換指定子に追加指定されたテキストを無視します。例:
Level%u
は'Level1'
を1
として読み取ります。例:
%uStep
は'2Step'
を2
として読み取ります。
sizeA
— 出力配列の次元
Inf
(既定値) | 整数 | 2 要素の行ベクトル
出力配列 A
の次元。Inf
、整数 または 2 要素の行ベクトルとして指定します。
入力 sizeA の形式 | 説明 |
---|---|
Inf | ファイルの最後まで読み込みます 数値データの場合、出力 A は列ベクトルになります。テキスト データの場合、 A は文字ベクトルになります。 |
| 最大 n 個の数値または文字フィールドを読み取ります。数値データの場合、出力 A は列ベクトルになります。テキスト データの場合、 A は文字ベクトルになります。 |
[ | 最大 個の数値または文字フィールドを読み取ります。n には Inf を指定できますが、m には指定できません。出力 A は、m 行 n 列で、列順に埋められます。 |
出力引数
A
— ファイル データ
列ベクトル | 行列 | 文字ベクトル | 文字配列
ファイル データ。列ベクトル、行列、文字ベクトルまたは文字配列として返されます。A
のクラスおよびサイズは、formatSpec
入力に依存します。
formatSpec
に数値指定子のみが含まれる場合、A
は数値になります。sizeA
引数を指定した場合、A
は指定されたサイズの行列になります。それ以外の場合は、A
は列ベクトルになります。入力に含まれている要素がsizeA
値より少ない場合、fscanf
はA
を 0 でパディングします。formatSpec
に 64 ビットの符号付き整数指定子のみが含まれる場合、A
のクラスはint64
になります。formatSpec
に 64 ビットの符号なしの整数指定子のみが含まれる場合、A
のクラスはuint64
になります。それ以外の場合、
A
はクラスdouble
です。
formatSpec
に文字またはテキスト指定子 (%c
または%s
) のみが含まれる場合、A
は文字配列になります。sizeA
を指定した際に、入力の文字数がそれより少ないと、fscanf
はA
をchar(0)
でパディングします。formatSpec
に数値と文字の指定子の組み合わせが含まれる場合、A
はクラスdouble
の数値になり、fscanf
は各テキスト文字をそれに相当する数値に変換します。この変換は、formatSpec
がすべての数値フィールドを明示的にスキップする場合 (たとえば、formatSpec
が'%*d %s'
の場合など) でも発生します。MATLAB® がファイル データを
formatSpec
と照合できない場合、A
は数値または文字配列になります。A
のクラスは、処理が終了する前にfscanf
が読み取る値によって異なります。
count
— 読み取られた文字数
スカラー
読み取られた文字数。スカラー値として返されます。
ヒント
関数
sscanf
およびfscanf
の読み取りに対する書式指定子は、関数sprintf
およびfprintf
の書き込み用の形式とは異なります。読み取り関数は精度フィールドをサポートしません。幅フィールドは、書き込み用には最小値を、読み取り用には最大値を指定します。
アルゴリズム
MATLAB は、ファイルに関連付けられたエンコード スキームを使用して文字を読み取ります。関数 fopen
を使用してファイルを開く際に、エンコードを指定します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
MEX コードの生成で、コード ジェネレーターは
fscanf
を外部関数として扱います。生成コードでの MATLAB エンジンを使用した関数呼び出しの実行 (MATLAB Coder)を参照してください。入力引数
formatSpec
は定数でなければなりません。%s
および%[...]
変換指定子はサポートされません。動的メモリ割り当てをオフにする場合は、入力引数
sizeA
を指定する必要があります。この引数は定数でなければなりません。生成されたコードの動作が MATLAB と異なる可能性があります。このような場合、生成されたコードの動作は、C 言語の
fscanf
の動作と一致します。以下にいくつかの例を示します。生成されたコードでは、
fscanf
が null バイトを読み取ると、返される値が切り捨てられる場合があります。整数値
x
を、intmax
がx
より小さい整数形式に読み込むと、MATLAB 出力はintmax
で飽和します。生成されたコードでは、この飽和でオーバーフローが発生します。特定の場合、
fscanf
によるファイルからの読み取リ後に、ファイル ポインターの場所が MATLAB と生成されたコードとで異なる場合があります。たとえば、ファイルmyFile.txt
に、文字ベクトル'1+2I'
が含まれているとします。次のコマンドを実行します。fid = fopen('myFile.txt','r'); tmp = fscanf(fid, '%f')
tmp = 1 2
ftell
を使用して、ファイルmyFile.txt
内の位置ポインターの現在の位置を確認します。ftell(fid)
ans = 3
MATLAB で、
fscanf
が実行されると、ファイル ポインターは 3 番目の文字'2'
の後に置かれます。生成されたコードで、fscanf
が実行された後、ファイル ポインターはファイル終端マーカーに配置されます。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入R2022b: スレッドベースの環境での関数の使用
この関数はスレッドベースの環境をサポートしています。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)