Низкоуровневые функции ввода-вывода файлов позволяют наиболее непосредственно управлять чтением или записью данных в файл. Однако эти функции требуют, чтобы вы указывали более подробную информацию о файле, чем более простые в использовании функции высокого уровня. Полный список функций высокого уровня и поддерживаемых ими форматов файлов см. в Поддерживаемые Форматы файлов для Импорта и Экспорта.
Если функции высокого уровня не могут импортировать ваши данные, используйте одно из следующего:
fscanf, который считывает форматированные данные в текстовом или ASCII-файле; то есть файл, который можно просмотреть в текстовом редакторе. Для получения дополнительной информации см. раздел Чтение данных в форматированный шаблон.
fgetl и fgets, который считывает по одной линии файла за раз, где символ новой строки разделяет каждую строку. Для получения дополнительной информации смотрите Построчное чтение данных.
fread, который считывает поток данных на байтовом или битовом уровне. Для получения дополнительной информации смотрите Чтение двоичных данных в файле.
Примечание
Низкоуровневые функции ввода-вывода файлов основаны на функциях в ANSI® Стандартная библиотека C. Однако MATLAB® включает векторизованные версии функций для чтения и записи данных в массив с минимальными циклами управления.
Как и в случае с любыми низкоуровневыми функциями ввода-вывода, перед импортом откройте файл с fopen, и получить идентификатор файла. Когда вы закончите обработку файла, закройте его с fclose(.fileID)
По умолчанию, fread считывает файл по 1 байту за раз и интерпретирует каждый байт как 8-битное беззнаковое целое число (uint8). fread создает вектор-столбец с одним элементом для каждого байта в файле. Значения в векторе-столбце имеют класс double.
Например, рассмотрите файл nine.bin, созданный следующим образом:
fid = fopen('nine.bin','w');
fwrite(fid, [1:9]);
fclose(fid);Чтобы считать все данные в файле в вектор-столбец классов 9 на 1 double:
fid = fopen('nine.bin');
col9 = fread(fid);
fclose(fid);По умолчанию, fread считывает все значения в файле в вектор-столбец. Однако можно задать количество считываемых значений или описать двумерную выходную матрицу.
Для примера читать nine.bin, описанная в предыдущем примере:
fid = fopen('nine.bin');
% Read only the first six values
col6 = fread(fid, 6);
% Return to the beginning of the file
frewind(fid);
% Read first four values into a 2-by-2 matrix
frewind(fid);
two_dim4 = fread(fid, [2, 2]);
% Read into a matrix with 3 rows and
% unspecified number of columns
frewind(fid);
two_dim9 = fread(fid, [3, inf]);
% Close the file
fclose(fid);Если значения в вашем файле не являются 8-битными беззнаковыми целыми числами, задайте размер значений.
Например, рассмотрите файл fpoint.bin, созданный со значениями двойной точности следующим образом:
myvals = [pi, 42, 1/3];
fid = fopen('fpoint.bin','w');
fwrite(fid, myvals, 'double');
fclose(fid);Чтобы считать файл:
fid = fopen('fpoint.bin');
% read, and transpose so samevals = myvals
samevals = fread(fid, 'double')';
fclose(fid);Полный список описаний точности см. в fread страница с описанием функции.
По умолчанию, fread создает массив классов double. Для хранения значений двойной точности в массиве требуется больше памяти, чем для хранения символов, целых чисел или значений с одной точностью.
Чтобы уменьшить объем памяти, необходимой для хранения данных, укажите класс массива одним из следующих методов:
Сопоставьте класс входных значений со звездочкой ('*'). Для примера, чтобы считать значения с одной точностью в массив классов single, используйте команду:
mydata = fread(fid,'*single')
Сопоставьте входные значения с новым классом с '=>' символ. Для примера читать uint8 значения в uint16 массив, используйте команду:
mydata = fread(fid,'uint8=>uint16')
Полный список описаний точности см. в fread страница с описанием функции.
Низкоуровневые функции MATLAB включают несколько опций для чтения фрагментов двоичных данных в файл:
Считывайте заданное количество значений за раз, как описано в разделе Изменение размерностей массива. Рассмотрите объединение этого метода с Проверкой на конец файла.
Перейдите в определенное место в файле, чтобы начать чтение. Для получения дополнительной информации см. раздел Перемещение внутри файла.
Пропустите определенное количество байтов или бит после чтения каждого элемента. Для получения примера смотрите Запись и чтение комплексных чисел.
Когда вы открываете файл, MATLAB создает указатель, чтобы указать текущее положение в файле.
Примечание
Открытие пустого файла не перемещает индикатор положения файла в конец файла. Считывайте операции и fseek и frewind functions, перемещает индикатор положения файла.
Используйте feof функция, чтобы проверить, достигли ли вы конца файла. feof возвращает значение 1 когда указатель на файл находится в конце файла. В противном случае возвращается 0.
Например, чтение большого файла по частям:
filename = 'largedata.dat'; % hypothetical file
segsize = 10000;
fid = fopen(filename);
while ~feof(fid)
currData = fread(fid, segsize);
if ~isempty(currData)
disp('Current Data:');
disp(currData);
end
end
fclose(fid);Чтобы считать или записать выбранные фрагменты данных, переместите индикатор положения файла в любое место в файле. Для примера вызовите fseek с синтаксисом
fseek(fid,offset,origin);
где:
Кроме того, чтобы легко переместиться в начало файла:
frewind(fid);
Использовать ftell для поиска текущей позиции в заданном файле. ftell возвращает количество байтов от начала файла.
Например, создайте файл five.bin:
A = 1:5;
fid = fopen('five.bin','w');
fwrite(fid, A,'short');
fclose(fid);Потому что вызов на fwrite задает short формат, каждый элемент A использует два байта памяти в five.bin.
Откройте five.bin для чтения:
fid = fopen('five.bin','r');Переместите индикатор положения файла вперед на 6 байт от начала файла:
status = fseek(fid,6,'bof');

Прочитайте следующий элемент:
four = fread(fid,1,'short');
Акт чтения совершенствует индикатор положения файла. Чтобы определить текущее положение файла, вызовите ftell:
position = ftell(fid)
position =
8 
Чтобы переместить индикатор положения файла назад на 4 байта, вызовите fseek снова:
status = fseek(fid,-4,'cof');

Считайте следующее значение:
three = fread(fid,1,'short');
Различные операционные системы хранят информацию по-разному в байтовом или битовом уровне:
Большие-эндовые системы хранят байты начиная с самого большого адреса в памяти (то есть начинают с большого конца).
Маленькие-эндовые системы хранят байты, начиная с наименьшего адреса (маленький конец).
Windows® системы используют малоэндовое упорядоченное расположение байтов, и UNIX® системы используют big-endian упорядоченное расположение байтов.
Чтобы считать файл, созданный в противоположной системе, задайте упорядоченное расположение байтов, используемый для создания файла. Вы можете задать упорядоченное расположение в вызове, чтобы открыть файл, или в вызове, чтобы считать файл.
Например, рассмотрите файл с именованными значениями двойной точности little.bin, созданный по малоэндовой системе. Чтобы считать этот файл в большой эндовой системе, используйте одну (или обе) из следующих команд:
Откройте файл с
fid = fopen('little.bin', 'r', 'l')Чтение файла с
mydata = fread(fid, 'double', 'l')
где 'l' указывает на маленькое-эндовое упорядоченное расположение.
Если вы не уверены, какой заказ байтов использует ваша система, вызовите computer функция:
[cinfo, maxsize, ordering] = computer
ordering является 'L' для маленьких эндовых систем или 'B' для систем с большим эндом.