このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
fread
バイナリ ファイルからのデータの読み込み
構文
説明
は、ファイルのバイトまたはビットの読み取りの順序を追加で指定します。A
= fread(___,machinefmt
)
例
uint8 データのファイル全体の読み取り
9 要素ベクトルをサンプル ファイル nine.bin
に書き込みます。
fileID = fopen('nine.bin','w'); fwrite(fileID,[1:9]); fclose(fileID);
ファイル内のすべてのデータをクラス double
のベクトルに読み取ります。既定で、fread
はファイルを 1 バイトずつ読み取り、各バイトを 8 ビット符号なし整数 (uint8
) と解釈し、double
配列を返します。
fileID = fopen('nine.bin');
A = fread(fileID)
A = 9×1
1
2
3
4
5
6
7
8
9
fread
は、ファイルの各バイトが 1 要素となる列ベクトルを返します。
A
に関する情報を表示します。
whos A
Name Size Bytes Class Attributes A 9x1 72 double
ファイルを閉じます。
fclose(fileID);
倍精度データのファイル全体の読み取り
9 つの倍精度値を含む doubledata.bin
という名前のファイルを作成します。
fileID = fopen('doubledata.bin','w'); fwrite(fileID,magic(3),'double'); fclose(fileID);
ファイル doubledata.bin
を開き、ファイルのデータを 3 行 3 列の配列 A
に読み取ります。ソース データがクラス double
であることを指定します。
fileID = fopen('doubledata.bin'); A = fread(fileID,[3 3],'double')
A = 3×3
8 1 6
3 5 7
4 9 2
ファイルを閉じます。
fclose(fileID);
ファイルからの選択された行または列の読み取り
1 ~ 9 の値を含む nine.bin
という名前のファイルを作成します。データは uint16
値として書き込みます。
fileID = fopen('nine.bin','w'); fwrite(fileID,[1:9],'uint16'); fclose(fileID);
最初の 6 つの値を 3 行 2 列の配列に読み取ります。ソース データがクラス uint16
であることを指定します。
fileID = fopen('nine.bin'); A = fread(fileID,[3,2],'uint16')
A = 3×2
1 4
2 5
3 6
fread
は、ファイル nine.bin
の最初の 6 つの値が列方向に入力された配列を返します。
ファイルの先頭に戻ります。
frewind(fileID)
一度に 2 つの値を読み取り、値を 1 つスキップして、次の値を読み取ります。precision
値に '2*uint16'
を使用して、この形式を指定します。データがクラス uint16
であるため、1 つの値は 2 バイトで表されます。そのため、skip
引数を 2
に指定します。
precision = '2*uint16';
skip = 2;
B = fread(fileID,[2,3],precision,skip)
B = 2×3
1 4 7
2 5 8
fread
は、nine.bin
の値が列方向に入力された 2 行 3 列の配列を返します。
ファイルを閉じます。
fclose(fileID);
2 進化 10 進符号値の桁の読み取り
2 進化 10 進符号 (BCD) 値を含むファイルを作成します。
str = ['AB'; 'CD'; 'EF'; 'FA']; fileID = fopen('bcd.bin','w'); fwrite(fileID,hex2dec(str),'ubit8'); fclose(fileID);
一度に 1 バイトずつ読み取ります。
fileID = fopen('bcd.bin'); onebyte = fread(fileID,4,'*ubit8');
BCD 値を表示します。
disp(dec2hex(onebyte))
AB CD EF FA
frewind
を使用してファイルの先頭に戻ります。リトルエンディアン システム上で一度に 4 ビットずつ読み取る場合、結果は誤った順序で表示されます。
frewind(fileID)
err = fread(fileID,8,'*ubit4');
disp(dec2hex(err))
B A D C F E A F
frewind
を使用してファイルの先頭に戻ります。前述のようにデータを一度に 4 ビットずつ読み取りますが、正しい結果を表示するためにビッグエンディアン順を指定します。
frewind(fileID) correct = fread(fileID,8,'*ubit4','ieee-be'); disp(dec2hex(correct))
A B C D E F F A
ファイルを閉じます。
fclose(fileID);
入力引数
fileID
— ファイル識別子
整数
開いているバイナリ ファイルのファイル識別子。整数として指定します。fread
でファイルを読み取る前に、fopen
を使用してファイルを開き、fileID
を取得しなければなりません。
データ型: double
sizeA
— 出力配列の次元
Inf
(既定値) | 整数 | 2 要素の行ベクトル
出力配列 A
の次元。Inf
、整数 または 2 要素の行ベクトルとして指定します。
入力 sizeA の形式 | 出力配列 A の次元。 |
---|---|
Inf | 各要素にファイルの値が含まれる列ベクトル。 |
| n 要素のある列ベクトル。 |
| 列順で入力した m 行 n 列の行列。n は Inf にすることができますが、m はできません。 |
precision
— 読み取る値のクラスおよびサイズ
'uint8=>double'
(既定値) | 文字ベクトルまたは string スカラー
読み取る値のクラスおよびビット単位のサイズ。次のいずれかの形式の文字ベクトルまたは string スカラーとして指定します。オプションで、入力に出力行列 A
のクラスを指定することもできます。
入力 precision の形式 | 説明 |
---|---|
source | 入力値は、source で指定されたクラスになります。出力行列 A は、クラス double です。例: 'int16' |
source =>output | 入力値は、source で指定されたクラスになります。出力行列 A のクラスは、output で指定します。例: 'int8=>char' |
* | 入力値と出力行列 A は、source で指定されたクラスになります。bit または ubit の精度の場合、出力は入力を収容できる最小のクラスになります。例: '*ubit18' これは 'ubit18=>uint32' と等価です。 |
|
|
以下の表に、source
および output
が取り得る値を示します。
値のタイプ | 精度 | ビット (バイト) |
---|---|---|
整数、符号なし |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
整数、符号付き |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
浮動小数点数 |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
文字 |
|
|
| MATLAB® |
ほとんどの source
の値では、fread
が値を完全に読み取る前にファイルの終端に到達すると、最後の値の結果を返しません。ただし、source
が bit
または n
ubit
の場合は、n
fread
はその最後の値の部分的な結果を返します。
メモ
MATLAB で NaN
および Inf
値を保持するには、double
または single
クラスのデータを読み取りおよび書き込みします。
データ型: char
| string
skip
— スキップするバイト数
0 (既定値) | スカラー
各値を読み込んだ後にスキップするバイト数。スカラーで指定します。precision
を bit
または n
ubit
に指定した場合、ビット内に n
skip
を指定します。
skip
引数を使用すると、固定長レコード内の不連続なフィールドからデータを読み取れます。
machinefmt
— バイトを読み取る順序
'n'
(既定値) | 'b'
| 'l'
| 's'
| 'a'
| ...
ファイル内のバイトを読み取る順序。文字ベクトルまたは string スカラーとして指定します。machinefmt
は、次の表の値のいずれかとして指定します。bit
および n
ubit
の精度では、n
machinefmt
でバイト内のビットを読み取る順序を指定しますが、バイトを読み取る順序はシステムのバイトの順序のままです。
| ご使用のシステムのバイト順 (既定) |
| ビッグエンディアン順 |
| リトルエンディアン順 |
| ビッグエンディアン順、64 ビット長データ型 |
| リトルエンディアン順、64 ビット長データ型 |
既定では、現在サポートされているすべてのプラットフォームは、新しいファイルにリトルエンディアン順を使用します。既存のバイナリ ファイルは、ビッグエンディアン順またはリトルエンディアン順のいずれも使用できます。
データ型: char
| string
出力引数
A
— ファイル データ
列ベクトル | 行列
ファイル データ。列ベクトルとして返されます。sizeA
引数を指定した場合、A
は指定されたサイズの行列になります。A
内のデータは、precision
引数に異なるクラスを指定しない限り、クラス double
です。
count
— 読み取られた文字数
スカラー
読み取られた文字数。スカラー値として返されます。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
入力引数
precision
は定数でなければなりません。precision
で指定するsource
クラスおよびoutput
クラスは次の値をもつことはできません。'long'
、'ulong'
、'unsigned long'
、'bit
、またはn
''ubit
。n
'machinefmt
入力は使用できません。precision
で指定するsource
またはoutput
がint
などの C 型である場合、その型のターゲットと量産サイズは以下でなければなりません。一致する。
MATLAB 型に直接マッピングする。
precision
で指定するsource
の型は、ターゲット ハードウェアの C 型に直接マッピングしなければなりません。fread
呼び出しによりファイル全体を読み取る場合、すべてのデータがコード生成に利用可能な最大配列に収まらなければなりません。sizeA
が定数でない場合または非有限要素を含む場合は、動的メモリ割り当てが必要です。関数
fread
のコード ジェネレーターは、source
またはoutput
のchar
値を符号付き8
ビット整数として扱います。0
から127
までの値のみを使用します。生成されたコードでは、ファイル読み取りエラーは報告されません。したがって、MATLAB コードで独自のファイル読み取りエラー処理を記述しなければなりません。読み取りバイト数が要求したバイト数と一致するかを、エラー処理コード内でチェックすることを検討してください。以下に例を示します。
... N = 100; [vals, numRead] = fread(fid, N, '*double'); if numRead ~= N % fewer elements read than expected end ...
スレッドベースの環境
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)