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. Транспонируйте выходной массив, 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

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

'single'

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