8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

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