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) считывает данные файла в массив, A, с размерностями, sizeA, и располагает указатель файла после последнего чтения значения. fread заполняет A в порядке следования столбцов.

пример

A = fread(fileID,sizeA,precision) интерпретирует значения в файле согласно форме и размеру, описанному precision. Аргумент sizeA является дополнительным.

пример

A = fread(fileID,sizeA,precision,skip) пропускает количество байтов или битов, заданных skip после чтения каждого значения в файле. Аргумент sizeA является дополнительным.

пример

A = fread(fileID,sizeA,precision,skip,machinefmt) дополнительно задает порядок для чтения байтов или битов в файле. Аргументы sizeA и skip являются дополнительными.

[A,count] = fread(___) дополнительно возвращает количество символов, которые fread читает в A. Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.

Примеры

свернуть все

Запишите вектор с девятью элементами в файл примера, 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 возвращает вектор - столбец с одним элементом для каждого байта в файле.

Просмотрите информацию о A.

whos A
  Name      Size            Bytes  Class     Attributes

  A         9x1                72  double              

Закройте файл.

fclose(fileID);

Создайте файл с именем 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);

Считайте содержимое файла, fread.m m. Транспонируйте выходной массив, A так, чтобы это был вектор - строка.

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

fread возвращает символьный массив, A.

Создайте файл с именем nine.bin, содержа значения от 1 до 9. Запишите данные как значения uint16.

fileID = fopen('nine.bin','w');
fwrite(fileID,[1:9],'uint16');
fclose(fileID);

Считайте первые шесть значений в 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.

Возвратитесь к началу файла.

frewind(fileID)

Считайте два значения за один раз и пропустите одно значение прежде, чем считать следующие значения. Задайте этот формат с помощью значения precision, '2*uint16'. Поскольку данные являются классом uint16, одно значение представлено на 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 возвращает массив 2х3, заполненный по столбцам со значениями от nine.bin.

Закройте файл.

fclose(fileID);

Создайте файл со значениями двоично-десятичного числа (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, целое число или двухэлементный вектор - строка.

Форма входного параметра sizeAРазмерности выходного массива, A
InfВектор - столбец, с каждым элементом, содержащим значение в файле.
nВектор - столбец с элементами n.
m, n m-by-n матрица, заполнил порядка следования столбцов. n может быть Inf, но m не может.

Класс и размер в битах значений, чтобы читать, заданный как вектор символа или скаляр строки в одной из следующих форм. Опционально входной параметр задает класс выходной матрицы, 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

Числа с плавающей запятой

единственный

32 (4)

'double'

64 (8)

'float'

32 (4)

'float32'

32 (4)

'float64'

64 (8)

'real*4'

32 (4)

'real*8'

64 (8)

'characters'

'char*1'

8 (1)

'char'

Зависит от схемы кодирования, сопоставленной с файлом. Установите кодирование с fopen.

Для большинства значений source, если fread достигает конца файла прежде, чем считать полное значение, это не возвращает результат для окончательного значения. Однако, если source является bitn или ubitn, то fread возвращает частичный результат для окончательного значения.

Примечание

Чтобы сохранить NaN и значения Inf в MATLAB®, читайте и запишите данные класса double или single.

Типы данных: char | string

Количество байтов, чтобы пропустить после чтения каждого значения, заданного как скаляр. Если вы задаете precision bitn или ubitn, задаете skip в битах.

Используйте аргумент skip, чтобы считать данные из полей, состоящих из нескольких несмежных участков, в записях фиксированной длины.

Порядок для чтения байтов в файле, заданном как вектор символа или скаляр строки. Задайте 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 являются классом double, если вы не задаете различный класс в аргументе precision.

Количество чтения символов, возвращенного как скалярное значение.

Расширенные возможности

Представлено до R2006a

Была ли эта тема полезной?