Создание программ часто предполагает сохранение результатов расчетов в файлы для их дальнейшего анализа, обработки и хранения. В связи с этим в среде MATLAB реализованы различные функции по работе с файлами, содержащие данные в разных форматах.
Для загрузки данных из файла,расположенного на локальном диске в рабочую средуMATLAB, используются следующие операторы: load, fread и fscanf. Для сохранения данных из рабочей среды MATLAB в файл на локальном диске предусмотрено использование следующих операторов: save, fwrite, fprintf.
В самом простом случае для сохранения и последующей загрузки каких-либо данных в среде MATLAB предусмотрены следующие функции, соответственно: save и load, имеющие следующий синтаксис:
save<имя файла><имена переменных>
load<имя файла><имена переменных>
Функция save позволяет сохранять произвольные переменные, используемые в программе в файл, который будет по умолчанию располагаться в рабочем каталоге (обычно поддиректория work) и иметь расширение mat. Соответственно функция load позволяет загрузить из указанного mat-файла ранее сохраненные переменные.
|
|
Недостатком функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в среде MATLAB. С этой целью в среде MATLAB предусмотрены следующие функции
fwrite(<идентификатор файла>, <переменная>, <тип данных>)
<переменная>=fread(<идентификатор файла>, <размер>, <точность>)
где: <идентификатор файла> – это указатель на файл, с которым предполагается работать. Для того, чтобы получить идентификатор файла, используется функция fopen, имеющая следующий синтаксис:
<идентификатор файла>=fopen(<имя файла>,<режим работы>)
где: параметр < режим работы> может принимать значения, приведенные в таблице 1.
В том случае, если функция fopen() по каким-либо причинам не может корректно открыть файл, то она возвращает значение –1. После выполнения всех файловых операций файл должен быть закрыт с помощью функции fclose следующей структуры:
fclose(<идентификатор файла>)
С помощью команды fclose(all) можно закрыть сразу все открытые файлы, кроме стандартных системных файлов.
Пример использования функций работы с файлами:
A=[1 2 3 4 5];
fid=fopen('my_file.dat', 'wb'); % открытие файла на запись
fwrite(fid, A, 'double'); % запись матрицы А в файл
fclose(fid); % закрытие файла
B=fread(fid, 5, 'double'); % чтение 5 значений в формате double
disp(B); % отображение на экране
fclose(fid); % закрытие файла
|
|
В результате выполнения данных операций в рабочем каталоге MATLABбудет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.
В приведенном примере в явном виде указывалось число элементов для считывания из файла. Однако, часто общее количество элементов бывает неизвестным, либо изменяется в процессе работы программы. В этом случае необходимо считывать данные из файла до тех пор, пока не будет достигнут его конец. В MATLAB существует функция для проверки достижения конца файла,которая возвращает 1 при достижении конца файла и 0 в других случаях и имеет следующий синтаксис:
feof(<идентификатор файла>)
Таблица 1 - Режимы работы с файлами в среде MATLAB при использовании функции fopen
Значение параметра <режим работы> | Описание параметра |
'r' | чтение |
'w' | запись (стирает предыдущее содержимое файла) |
'a' | добавление (создает файл, если его нет) |
'r+' | чтение и запись (не создает файл, если его нет) |
'w+' | чтение и запись (очищает прежнее содержимое или создает файл, если его нет) |
'a+' | чтение и добавление (создает файл, если его нет) |
'b' | дополнительный параметр, означающий работу с бинарными файлами, например, ‘wb’, ‘rb’ ‘rb+’, ‘ab’ |
Описанные ранее функции работы с файлами позволяют записывать и считывать информацию по байтам, которые затем требуется правильно интерпретировать для преобразования их в числа или строки. В то же время выходными результатами многих программ являются текстовые файлы, в которых явным образом записаны те или иные числа или текст. Прочитать такой файл побайтно, а затем интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих целей были специально разработаны функции форматированного чтения или записи информации: fscanf и fprintf, соответственно.
Функция чтения fscanf имеет следующий синтаксис:
[value, count]=fscanf(fid, format, size)
где: value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных
Функция записи fprintf имеет следующий синтаксис:
count=fprintf(fid, format, a,b,...)
где: a, b,… – переменные для записи в файл.
Таблица 2- Список основных спецификаторов параметра format для функций fscanf() и fprintf()
Спецификатор | Описание |
%d | целочисленные значения |
%f | вещественные значения |
%s | строковые данные |
%c | символьные данные |
%u | беззнаковые целые значения |
В форматной строке могут бытьтакже использованы различные управляющие символы:
\r – возврат каретки;
\t – горизонтальная табуляция;
\n – переход на новую строку
С помощью функции fprintf() можно осуществлять запись разнородных данных в файл в требуемом формате, в том числе и строковых переменных, что позволяет размещать в файле различные текстовые надписи.