ドキュメンテーション

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

fread

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

構文

  • A = fread(fileID)
  • A = fread(fileID,sizeA)
  • A = fread(fileID,sizeA,precision)
  • A = fread(fileID,sizeA,precision,skip)
  • A = fread(fileID,sizeA,precision,skip,machinefmt)
  • [A,count] = fread(___)

説明

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

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

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

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

A = fread(fileID,sizeA,precision,skip,machinefmt) は、ファイルのバイトまたはビットの読み取りの順序を追加で指定します。引数 sizeAskip はオプションです。

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

すべて展開する

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 =

     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 =

     8     1     6
     3     5     7
     4     9     2

ファイルを閉じます。

fclose(fileID);

テキスト ファイルの読み取り

ファイル fread.m の内容を読み取ります。出力配列 A が行ベクトルになるように転置します。

fileID = fopen('fread.m');
A = fread(fileID,'*char')';
fclose(fileID);

fread は、文字配列 A を返します。

ファイルからの選択された行または列の読み取り

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 =

     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 =

     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(fid,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各要素にファイルの値が含まれる列ベクトル。
nn 要素のある列ベクトル。
[m,n]列順で入力した mn 列の行列。nInf にすることができますが、m はできません。

precision — 読み取る値のクラスおよびサイズ'uint8=>double' (既定値) | 文字列

読み取る値のクラスおよびビット単位のサイズ。次の形式のいずれかで文字列として指定します。オプションで、入力に出力行列 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

ファイルに関連付けられたエンコード スキームに依存します。fopen を使用してエンコードを設定します。

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

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

skip — スキップするバイト数0 (既定値) | スカラー

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

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

machinefmt — バイトを読み取る順序'n' (既定値) | 'b' | 'l' | 's' | 'a' | ...

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

'n' または 'native'

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

'b' または 'ieee-be'

ビッグエンディアン順

'l' または 'ieee-le'

リトルエンディアン順

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

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

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

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

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

出力引数

すべて展開する

A — ファイル データ列ベクトル | 行列

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

count — 読み取られた文字数スカラー

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

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