Раздел: Документация
0 ... 133 134 135 136 137 138 139 ... 365 вляется функцией feof с входным аргументом — идентификатором файла, f eof возвращает логическую единицу, если в файле нет больше строк, и логический ноль в противном случае. По окончании работы необходимо закрыть файл командой fciose, указав в качестве входного аргумента идентификатор файла. Файл-функция myview (листинг 8.2) демонстрирует открытие текстового файла, занесение содержимого в массив строк и вывод их на экран. Вызов файл-функции с входным аргументом — именем любого существующего файла, заключенным в апострофы, приводит к отображению содержимого файла в командном окне. Если М-файл с файл-функцией myview хранится в текущем каталоге MATLAB, то myview (myview.m1) выводит листинг самой файл-функции (текст, набранный кириллицей, может выводиться некорректно). [ Листинг 8.2. Файл-функция myview для просмотра содержимого файла ••»tHimt>nifHiiimHi<iH<iu«i"ilHmiitiinli-mk-...... function myview(filename) ; % функция выводит содержимое текстового файла на экран % использование myview(имя файла) % проверка аргументов if nargout — О error(функция не имеет выходных аргументов); end if nargin -= 1 error(функция вызывается с одним входным аргументом); end if -ischar(filename) error(1 входной аргумент функции должен быть строкой); end % Открытие текстового файла для считывания (аргумент rt), ft имя файла хранится в filename, % идентификатор файла записывается в F, % строка с информацией о возможных ошибках - в mes [F, mes] = fopen(filename, rt); % Если файл успешно открылся, то идентификатор не равен минус единице if F ~= -1 MAS = ; % сначала массив состоит только из пустой строки & Последовательное считывание из файла строки до тех пор, Ь пока не достигнут конец файла while feof(F) = О % считывание строки line = fgeti(F); % добавление считанной строки в массив строк MAS = char(MAS, line); end % закрытие файла fclose (F) ; l вывод массива строк в командное окно disp(MAS) else % В эту ветвь программа заходит, если при открытии файла % возникли ошибки; происходит информирование об ошибке S и вывод в командное окно сообщения, выданного fopen disp (1СШБКА при открытии файла) disp(mes) end В качестве упражнения напишите файл-функцию, которая ищет заданную строку в текстовом файле и возвращает вектор с номерами строк файла, содержащих ее. Файл-функция должна иметь два входных аргумента— имя файла и искомую строку и один выходной— массив с номерами строк. Используйте функцию findstr, описанную выше, для поиска подстроки в строке. Попытайтесь обойтись без считывания содержимого текстового файла в массив строк для экономии памяти (текстовый файл может быть достаточно большим). Основной блок алгоритма приведен в листинге 8.3, дополните его проверкой входных и выходных аргументов. i Листинг 8.3. Основной блок алгоритма поиска номеров строк, содержащих I подстроку function rows = mysearch(filename, substring) % файл-функция my search ищет подстроку в текстовом файле % и возвращает номера строк, содержащих данную подстроку % Использование rows — mysearch(filename, substring) % Здесь добавьте проверку параметров % Открытие файла [F, mes] = fopen(filename, rt+); % Проверка, успешно ли открыт флил if F ~= -1 count = 0; % обнуление счетчика строк find =0; % обнуление счетчика строк, содержащих подстроку rows = [ ]; % создание пустого массива для хранения номеров строк % Последовательная обработка строк while feof(F) == 0 line = fgetl(F),- % считывание текущей строки count = count +1; % увеличение счетчика строк % Сравнение длин строки файла и подстроки, % поиск имеет смысл в строках, которые длиннее подстроки if length(line) >= length(substring) % определение позиций вхождения подстроки pos = findstr(substring, line); % проверка, что массив вхождений pos не пуст if length(pos) > 0 find = find + 1; % увеличение счетчика найденных строк % Занесение номера найденной строки в выходной массив rows(find) = count; end end end fciose(F); % закрытие файла else % обработка ошибки при открытии файла disp(ошибка при открытии файла); disp(mes) end Запись в текстовый файл Символы текстового файла образуют строки со словами, предложениями или числами. Запись текстовых строк достаточно проста, а вот для занесения в текстовый файл чисел приходится прибегать к специальным форматам. Вывод информации в текстовый файл производится при помощи функции fprintf. В следующих двух разделах демонстрируется использование fprintf на примере создания файла, содержащего таблицу значений функции с заголовком п шапкой. 0 ... 133 134 135 136 137 138 139 ... 365
|