Main Content

fread

バイナリ ファイルからのデータの読み込み

説明

A = fread(fileID) は、開いたバイナリ ファイルから列ベクトル A にデータを読み取り、ファイル ポインターをファイルの終端マーカーに配置します。バイナリ ファイルはファイル識別子 fileID で示されます。fopen を使用すると、このファイルを開いて fileID 値を取得できます。読み取りが終わったら、fclose(fileID) を呼び出してファイルを閉じます。

A = fread(fileID,sizeA) は、次元が sizeA の配列 A にファイル データを読み取り、読み取られた最後の値の後にファイル ポインターを配置します。freadA にデータを列順に入力します。

A = fread(fileID,precision) は、precision に記述されている形式とサイズでファイル内の値を解釈します。

A = fread(fileID,sizeA,precision) は、次元が sizeA の配列 A にファイル データを読み取り、読み取られた最後の値の後にファイル ポインターを配置します。freadA にデータを列順に入力します。ファイル内では precision に記述されている形式とサイズで値が解釈されます。

A = fread(___,skip) は、ファイルの各値を読み取った後、skip で指定されたバイト数またはビット数をスキップします。

A = fread(___,machinefmt) は、ファイルのバイトまたはビットの読み取りの順序を追加で指定します。

[A,count] = fread(___) は、freadA に読み取った文字数を追加で返します。この構文では、前述の構文の入力引数のいずれかを使用できます。

すべて折りたたむ

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 進符号 (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);

入力引数

すべて折りたたむ

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

データ型: double

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

入力 sizeA の形式出力配列 A の次元。
Inf各要素にファイルの値が含まれる列ベクトル。
nn 要素のある列ベクトル。
[m,n]列順で入力した mn 列の行列。nInf にすることができますが、m はできません。

読み取る値のクラスおよびビット単位のサイズ。次のいずれかの形式の文字ベクトルまたは string スカラーとして指定します。オプションで、入力に出力行列 A のクラスを指定することもできます。

入力 precision の形式説明
source入力値は、source で指定されたクラスになります。出力行列 A は、クラス double です。
例: 'int16'
source=>output入力値は、source で指定されたクラスになります。出力行列 A のクラスは、output で指定します。
例: 'int8=>char'
*source入力値と出力行列 A は、source で指定されたクラスになります。bitn または ubitn の精度の場合、出力は入力を収容できる最小のクラスになります。
例: '*ubit18'
これは 'ubit18=>uint32' と等価です。

N*source または
N*source=>output

N 値を読み取った後、引数 skip で指定されたバイト数をスキップします。
例: '4*int8'

以下の表に、source および output が取り得る値を示します。

値のタイプ精度ビット (バイト)

整数、符号なし

'uint'

32 (4)

'uint8'

8 (1)

'uint16'

16 (2)

'uint32'

32 (4)

'uint64'

64 (8)

'uchar'

8 (1)

'unsigned char'

8 (1)

'ushort'

16 (2)

'ulong'

32 (4)

'ubitn'

1n64

整数、符号付き

'int'

32 (4)

'int8'

8 (1)

'int16'

16 (2)

'int32'

32 (4)

'int64'

64 (8)

'integer*1'

8 (1)

'integer*2'

16 (2)

'integer*4'

32 (4)

'integer*8'

64 (8)

'schar'

8 (1)

'signed char'

8 (1)

'short'

16 (2)

'long'

32 (4)

'bitn'

1n64

浮動小数点数

'single'

32 (4)

'double'

64 (8)

'float'

32 (4)

'float32'

32 (4)

'float64'

64 (8)

'real*4'

32 (4)

'real*8'

64 (8)

文字

'char*1'

8 (1)

'char'

MATLAB®char 型は固定サイズでなく、バイト数は、ファイルに関連付けられているエンコード スキームによって異なります。fopen を使用してエンコードを設定します。

ほとんどの source の値では、fread が値を完全に読み取る前にファイルの終端に到達すると、最後の値の結果を返しません。ただし、sourcebitn または ubitn の場合は、fread はその最後の値の部分的な結果を返します。

メモ

MATLAB で NaN および Inf 値を保持するには、double または single クラスのデータを読み取りおよび書き込みします。

データ型: char | string

各値を読み込んだ後にスキップするバイト数。スカラーで指定します。precisionbitn または ubitn に指定した場合、ビット内に skip を指定します。

skip 引数を使用すると、固定長レコード内の不連続なフィールドからデータを読み取れます。

ファイル内のバイトを読み取る順序。文字ベクトルまたは string スカラーとして指定します。machinefmt は、次の表の値のいずれかとして指定します。bitn および ubitn の精度では、machinefmt でバイト内のビットを読み取る順序を指定しますが、バイトを読み取る順序はシステムのバイトの順序のままです。

'n' または 'native'

ご使用のシステムのバイト順 (既定)

'b' または 'ieee-be'

ビッグエンディアン順

'l' または 'ieee-le'

リトルエンディアン順

's' または 'ieee-be.l64'

ビッグエンディアン順、64 ビット長データ型

'a' または 'ieee-le.l64'

リトルエンディアン順、64 ビット長データ型

既定では、現在サポートされているすべてのプラットフォームは、新しいファイルにリトルエンディアン順を使用します。既存のバイナリ ファイルは、ビッグエンディアン順またはリトルエンディアン順のいずれも使用できます。

データ型: char | string

出力引数

すべて折りたたむ

ファイル データ。列ベクトルとして返されます。sizeA 引数を指定した場合、A は指定されたサイズの行列になります。A 内のデータは、precision 引数に異なるクラスを指定しない限り、クラス double です。

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

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する