Подготовка файла к работе.
Для открытия файлов может использоваться функция fopen, которая в случае удачного завершения возвращает целочисленный положительный идентификатор файла f_id (называемый также номером файла). В простейшем варианте вызова указывается единственный входной аргумент – имя открываемого файла:
f_id=fopen('name_file');
В качестве открываемого файла может быть задано короткое имя, и тогда система пытается его отыскать сначала в рабочем каталоге, а затем осуществляет поиск во всех каталогах, доступных MATLAB. При задании полной спецификации поиск производится лишь в указанном каталоге. В случае неудачи возвращаемое значение равно -1. Для получения дополнительной информации, поясняющей причину ошибки при открытии файла, к фукнции fopen можно обратиться с двумя выходными параметрами:
[f_id err_txt]=fopen('name_file');
В случае ошибки в переменную err_txt будет занесено соответствующее сообщение. Если указанный файл обнаружен, то он открывается для чтения как бинарный файл.
Второй необязательный аргумент функции fopen определяет режим доступа к открываемому файлу. В качесте данного параметра могут выступать один, два или три символа, заключенные в одинарные кавычки. Соответствующие пояснения представлены в таблице 2.31.1.
Таблица 2.31.1. Варианты вызова функции fopen.
Формат вызова | Выполняемое действие |
fopen('name_file','r') | Открывается существующий бинарный файл для чтения |
fopen('name_file','rt') | Открывается существующий текстовый файл для чтения |
fopen('name_file','r+') | Открывается существующий бинарный файл, который может использоваться как для чтения, так и для записи (новый файл при этом не создается) |
fopen('name_file','rt+') | Открывается существующий текстовый файл, который может использоваться как для чтения, так и для записи (новый файл при этом не создается) |
fopen('name_file','w') | Открывается существующий или создается новый бинарный файл для записи. Предыдущее содержимое существующего файла пропадает |
fopen('name_file','wt') | Открывается существующий или создается новый текстовый файл для записи. Предыдущее содержимое существующего файла пропадает |
fopen('name_file','w+') | Если существующий бинарный файл был ранее открыт, то его содержимое от текущей позиции указателя и до конца усекается. Если файл с таким именем не Существовал, то создается новый Файл. Открытый файл можно Использовать для записи и чления. |
fopen('name_file','wt+') | Если существующий текстовый файл был ранее открыт, то его содержимое от текущей позиции указателя и до конца усекается. Если файл с таким именем не Существовал, то создается новый Файл. Открытый файл можно Использовать для записи и чления. |
fopen('name_file','a') | Открывается существующий бинарный файл для дозаписи или создается новый файл. |
fopen('name_file','at') | Открывается существующий текстовый файл для дозаписи или создается новый файл. |
fopen('name_file','a+') | Открывается существующий бинарный файл для чтения и дозаписи. Если файла с указанным именем нет, то его создают. |
fopen('name_file','at+') | Открывается существующий текстовый файл для чтения и дозаписи. Если файла с указанным именем нет, то его создают. |
Отметим, что иногда при открытии бинарных файлов по аналогии с языком программирования C++ к символам режима добавляют буку b (от английского слова binary – бинарный или двоичный): 'rb', 'wb' и т.д.
Операции обмена как с текстовыми, так и с бинарными файлами используют указатель на начало текущей позиции данных. Если файл открывают для чтения или записи этот указатель ориентирован на первую строку или первый байт в соответствующем наборе данных. Если файл открывают для дозаписи, то указатель перемещается в конец данных, что позволяет присоединить новые данные в дополнение к существующей информации.
Заметим, что функция fopen допускает еще один вариант вызова:
v=fopen('all');
В этом случае она возвращает вектор с номерами всех файлов, открытых к рассматриваемому моменту времени (файлы с номерами 0, 1 и 2, закрепленными за системными файлами (это соответственно файл стандартного ввода (stdin), файл стандартного вывода (stdout) и файл, предназначенный для вывода сообщений об ошибках (stderr)), в этот список не влючаются.