Считайте данные из двоичного файла
считывает данные из открытого двоичного файла в вектор-столбец A
= fread(fileID
)A
и положения указатель файла в конце маркера. Двоичный файл обозначается идентификатором файла, fileID
. Используйте fopen
открыть файл и получить fileID
значение. Когда вы закончили читать, закрываете файл путем вызова fclose(fileID)
.
Запишите вектор с девятью элементами в файл примера, 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);
fileID
— Идентификатор файлаИдентификатор файла открытого двоичного файла, заданного как целое число. Прежде, чем считать файл с fread
, необходимо использовать fopen
открыть файл и получить fileID
.
Типы данных: double
sizeA
— Размерности выходного массиваInf
(значение по умолчанию) | целое число | двухэлементный вектор-строкаРазмерности выходного массива, A
, заданный как Inf
, целое число или двухэлементный вектор-строка.
Форма sizeA Входной параметр | Размерности выходного массива, A |
---|---|
Inf | Вектор-столбец, с каждым элементом, содержащим значение в файле. |
| Вектор-столбец с n элементы. |
| m - n матрица, заполнил порядка следования столбцов. n может быть Inf , но m не может. |
precision
— Класс и размер значений, чтобы читать'uint8=>double'
(значение по умолчанию) | вектор символов или скаляр строкиКласс и размер в битах значений, чтобы читать, заданный как вектор символов или скаляр строки в одной из следующих форм. Опционально вход задает класс выходной матрицы, A
.
Форма precision Входной параметр | Описание |
---|---|
source | Входные значения имеют класс, заданный source . Выходная матрица A класс double . Пример: 'int16' |
source => output | Входные значения имеют класс, заданный source . Класс выходной матрицы, A , задан output . Пример: 'int8=>char' |
* | Входные значения и выходная матрица, A , имеют класс, заданный source . Для bit или ubit точность, выход имеет самый маленький класс, который может содержать вход.Пример: '*ubit18' Это эквивалентно 'ubit18=>uint32' |
| Считайте |
Следующая таблица показывает возможные значения для source
и output
.
Тип значения | Точность | Биты (Байты) |
---|---|---|
Целые числа, без знака |
| 32 (4) |
| 8 (1) | |
| 16 (2) | |
| 32 (4) | |
| 64 (8) | |
| 8 (1) | |
| 8 (1) | |
| 16 (2) | |
| 32 (4) | |
| 1 | |
Целые числа, подписанные |
| 32 (4) |
| 8 (1) | |
| 16 (2) | |
| 32 (4) | |
| 64 (8) | |
| 8 (1) | |
| 16 (2) | |
| 32 (4) | |
| 64 (8) | |
| 8 (1) | |
| 8 (1) | |
| 16 (2) | |
| 32 (4) | |
| 1 | |
Числа с плавающей запятой |
| 32 (4) |
| 64 (8) | |
| 32 (4) | |
| 32 (4) | |
| 64 (8) | |
| 32 (4) | |
| 64 (8) | |
'characters' |
| 8 (1) |
| Зависит от схемы кодирования, сопоставленной с файлом. Установите кодирование с |
Для большинства значений source
, если fread
достигает конца файла прежде, чем считать полное значение, это не возвращает результат для окончательного значения. Однако, если source
bit
или n
ubit
, затем n
fread
возвращает частичный результат для окончательного значения.
Сохранить NaN
и Inf
значения в MATLAB®, читайте и запишите данные класса double
или single
.
Типы данных: char |
string
skip
— Количество байтов, чтобы пропуститьКоличество байтов, чтобы пропустить после чтения каждого значения, заданного как скаляр. Если вы задаете precision
из bit
или n
ubit
, задайте n
skip
в битах.
Используйте skip
аргумент, чтобы считать данные из полей, состоящих из нескольких несмежных участков, в записях фиксированной длины.
machinefmt
— Порядок для чтения байтов'n'
(значение по умолчанию) | 'b'
| 'l'
| 's'
| 'a'
| ...Порядок для чтения байтов в файле, заданном как вектор символов или скаляр строки. Задайте machinefmt
как одно из значений в таблице, которая следует. Для bit
и n
ubit
точность, n
machinefmt
задает порядок для чтения битов в байте, но порядок для чтения байтов остается ваш системный порядок байтов.
| Ваш системный порядок байтов (значение по умолчанию) |
| Упорядоченное расположение с обратным порядком байтов |
| Упорядоченное расположение с прямым порядком байтов |
| Упорядоченное расположение обратного порядка байтов, 64-битный долгий тип данных |
| Упорядоченное расположение прямого порядка байтов, 64-битный долгий тип данных |
По умолчанию все в настоящее время поддерживаемые платформы используют упорядоченное расположение прямого порядка байтов в новых файлах. Существующие двоичные файлы могут использовать или упорядоченное расположение с прямым порядком байтов или с обратным порядком байтов.
Типы данных: char |
string
A
— Данные о файлеДанные о файле, возвращенные как вектор-столбец. Если вы задали sizeA
аргумент, затем A
матрица заданного размера. Данные в A
класс double
если вы не задаете различный класс в precision
аргумент.
count
— Количество чтения символовКоличество чтения символов, возвращенного как скалярное значение.
Указания и ограничения по применению:
Входной параметр precision
должна быть константа.
source
и output
классы, что precision
задает не может иметь этих значений: 'long'
, 'ulong'
, 'unsigned long'
, 'bit
, или n
''ubit
.n
'
Вы не можете использовать machinefmt
входной параметр.
Если source
или output
тот precision
задает тип C, например, int
, затем цель и производственные размеры для того типа должны:
Соответствие.
Сопоставьте непосредственно с типом MATLAB.
source
введите тот precision
задает должен сопоставить непосредственно с типом C на целевом компьютере.
Если fread
вызовите читает целый файл, затем все данные должны поместиться в самый большой массив, доступный для генерации кода.
Если sizeA
не является постоянным или содержит неличный элемент, затем динамическое выделение памяти требуется.
Генератор кода для fread
функционируйте обрабатывает char
значение для source
или output
как 8
со знаком- битное целое число. Используйте значения между
0
и 127
только.
Сгенерированный код не сообщает, что файл считал ошибки. Поэтому необходимо написать собственную обработку ошибок чтения файла в коде MATLAB. В вашем коде обработки ошибок рассмотрите проверку, что количество байтов считало соответствия количество байтов, которые вы запросили. Например:
... N = 100; [vals, numRead] = fread(fid, N, '*double'); if numRead ~= N % fewer elements read than expected end ...
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.