- •Лабораторная работа №4
- •Цикл for
- •Цикл while, суммирование рядов
- •4.2.2 Операторы ветвления
- •Условный оператор if
- •Организация ветвления
- •4.2.3 Приоритет операций
- •4.2.4 Текстовые файлы
- •Открытие файла, считывание данных и закрытие файла
- •Запись в текстовый файл
- •Запись строк
- •Форматный вывод
- •Считывание информации из текстового файла
- •3.3. Порядок выполнения работы
- •3.4 Контрольные вопросы
4.2.4 Текстовые файлы
Работа с файлами состоит из трех этапов: открытие файла, считывание или запись информации, закрытие файла. Следующие разделы посвящены описанию команд MatLab, реализующих вышеперечисленные действия, и демонстрации их использования на некоторых простых примерах.
Открытие файла, считывание данных и закрытие файла
Команда fopen предназначена для открытия существующего или создания нового файла. Имя файла указывается в апострофах первым входным аргументом. Второй аргумент задает способ доступа к файлу, он может принимать следующие значения (символ t указывает на то, что файл текстовый):
' rt' — открываемый текстовый файл предназначен только для чтения;
'rt+' — открываемый текстовый файл предназначен для чтения и записи;
' wt' — создаваемый пустой текстовый файл предназначен только для записи;
'wt+'— создаваемый пустой текстовый файл предназначен для записи и чтения.
Выходными аргументами fopen являются идентификатор, присвоенный файлу, и строковая переменная с сообщением о результате открытия. Если файл открыть не удалось, то идентификатор становится равным минус единице. Ошибки часто возникают из-за того, что MatLab не может найти требуемый файл. Всегда лучше указывать полное имя файла, при задании только имени и расширения MatLab производит поиск в текущем каталоге.
Считывание строк из открытого текстового файла производится командой fgetl, входным аргументом которой является идентификатор файла, присвоенный ему при открытии, а выходным — строковая переменная. Каждое обращение к fgetl позволяет последовательно считывать строки от начала до конца файла. Контроль за достижением конца файла осуществляется функцией feof с входным аргументом — идентификатором файла, feof возвращает единицу, если в файле нет больше строк, и ноль — в противном случае. По окончании работы необходимо закрыть файл командой fclose, указав в качестве входного аргумента идентификатор файла.
Файл-функция myview демонстрирует открытие текстового файла, занесение содержимого в массив строк и вывод их на экран. Вызов файл-функции с входным аргументом — именем любого существующего файла, заключенным в апострофы, приводит к отображению содержимого файла в командном окне. Если М-файл с файл-функцией myview хранится в текущем каталоге MatLab, то команда myview('myview.m') выводит листинг самой файл-функции.
Пример: Файл-функция myview для просмотра содержимого файла;
function myview (filename)
% Функция выводит содержимое текстового файла на экран
% использование myview('имя файла')
% проверка аргументов
if nargout ~= 0
error('Функция не имеет выходных аргументов');
end
if nargin ~= 1
error('Функция вызывается с одним входным аргументом');
end
if ~ischar(filename)
error('Входной аргумент функции является строкой');
end
% Открытие текстового файла для считывания (аргумент 'rt'),
% имя файла хранится в filename,
% идентификатор файла записывается в F,
% строка с информацией о возможных ошибках в mes
[F, mes] = fopen (filename, 'rt');
% Если файл успешно открылся, то идентификатор не равен минус единице
if F ~= -1
MAS = ''; % сначала массив состоит только из пустой строки
% Последовательное считывание из файла строки до тех пор,
% пока не достигнут конец файла while feof(F) == 0
% считывание строки
line = fgetl(F);
% добавление считанной строки в массив строк
MAS = char(MAS, line);
end
% закрытие файла fclose(F);
% вывод массива строк в командное окно
disp(MAS)
else
% В эту ветвь программа заходит, если при открытии файла
% возникли ошибки; происходит информирование об ошибке
% и вывод в командное окно сообщения, выданного fopen
disp('ОШИБКА при открытии файла')
disp(mes)
end