lection_matlab_all / matlab_9
.pdfРабота с форматированными файлами и файлами изображений
Файлы, содержащие форматированные данные (в виде читабельного текста), называют форматированными файлами. Их открытие для обработки так же, как и двоичных, производится командой fid = fopen(filename, permission), только параметр permission необходимо задать одним из следующих значений (добавляется символ 't'):
'rt' – открытие файла для чтения;
'rt+' – открытие файла для чтения и записи;
'wt' – удаление содержимого существующего файла или создание нового и открытие его для записи;
'at' – создание и открытие нового файла или открытие существующегодля записи с добавлением в конец файла.
Функции для чтения символьных строк:
•line = fgetl(fid) возвращает строку из файла с идентификатором fid с удалением символа конца строки. Если функция fgetl обнаруживает конец файла, то она возвращает значение –1;
•line = fgets(fid) возвращает строку из файла с идентификатором fid, не удаляя символ конца строки. Если функция fgets обнаруживает конец файла, то она возвращает значение –1;
•line = fgets(fid, nchar) возвращает не больше чем nchar первых символов строки. После признака конца строки или конца файла никакие дополнительные символы не считываются.
Форматированный вывод в файл:
• count = fprintf(fid, format, A,…) форматирует данные, содержащиеся в действительной части матрицы А, под контролем строки format и записывает их в файл с идентификатором fid (возвращается функцией fopen). Возвращает число записанных байтов — count.
Строка format (почти полностью аналогично формату С) определяет систему счисления, выравнивание, значащие цифры, ширину поля и другие атрибуты выходного формата данных. Она может содержать также обычные символы наряду со спецификаторами, знаками выравнивания и т. д.
Спецификаторы формата:
%d - данные в десятичной системе (целые со знаком) %u - данные в десятичной системе (целые без знака) %f - данные с фиксированной точкой
%e - экспоненциальное представление чисел с использованием символа «e» в нижнем регистре, например 3.1415e + 00
%E - экспоненциальное представление чисел с использованием символа «E» в верхнем регистре, например 3.1415Е + 00
%g - компактный вариант %e и %f, незначащие нули не выводятся
%G - то же самое, что и %g, но используется верхний регистр для символа «E»
Спецификаторы формата:
%c - одиночный символ %s - строка символов
%o - данные в восьмеричной системе (без знака)
%x - данные в шестнадцатеричной системе с использованием символов нижнего регистра («a»…«f»)
%X - данные в шестнадцатеричной системе с использованием символов верхнего регистра («A»…«F»)
Управляющие символы (escape-последовательности)
\n - новая строка |
\t - горизонтальная табуляция |
\b - возврат на один символ |
\r - возврат каретки |
\f - новая страница |
|
\\ - символ «\» |
|
\'' - одиночная кавычка «'» |
|
%% - символ «%» |
|
Между знаком процента и буквой в спецификатор могут быть вставлены дополнительные символы:
Знак «-» - выравнивание преобразованных аргументов по левому краю, например %–6.2d.
Знак «+» - печатать знак числа (+ или -), например %+6.2d.
Цифрами определяется минимальное число знаков числа (ширина поля), которые будут напечатаны (%8f), а цифры после точки определяют количество символов, печатаемых справа от десятичной точки ( %8.3f). Цифра «0» после «%» - заполнение свободного поля вывода нулями вместо пробелов (%06.2d).
Чтение форматированных данных из файла:
• A = fscanf(fid, format) или [A,count] = fscanf(fid, format, size) - читает данные из файла с идентификатором fid, преобразует их согласно значению параметра format и возвращает в виде матрицы А. count - количество успешно считанных элементов.
Параметр format представляет собой строку, определяющую формат данных, которая состоит из обычных символов и (или) спецификаторов. Спецификаторы указывают тип считываемых данных и включают символ %, опцию ширины поля и символы формата. Возможные спецификаторы формата перечислены выше.
Параметр size определяет количество считываемых данных.
Допустимы следующие значения size:
•n – чтение n элементов в вектор-столбец;
•inf – чтение элементов до конца файла и помещение их в вектор-столбец, содержащий такое же количество элементов, что и в файле;
•[m, n] – считывает столько элементов, сколько требуется для заполнения матрицы размера m×n. Заполнение происходит (как всегда) по столбцам. Величина n (но не m!) может принимать значение inf.
result.dat: Пример:
-3.1416 -1.000000 -2.8274 -0.951057 -2.5133 -0.809017 -2.1991 -0.587785 -1.8850 -0.309017 -1.5708 0.000000 -1.2566 0.309017 -0.9425 0.587785 -0.6283 0.809017 -0.3142 0.951057 0.0000 1.000000 0.3142 0.951057 0.6283 0.809017 0.9425 0.587785 1.2566 0.309017 1.5708 0.000000 1.8850 -0.309017 2.1991 -0.587785 2.5133 -0.809017 2.8274 -0.951057 3.1416 -1.000000
>>x = linspace(-pi, pi, 21);
>>y = [x; cos(x)];
>>fid = fopen('result.dat', 'w');
>> fprintf(fid,'%6.4f %10.6f\n',y);
>>fclose(fid);
>>fid = fopen('result.dat', 'r');
>>z = fscanf(fid, '%g', [2, 20]);
>>fgetl(fid)
ans = ''
>> fgets(fid)
ans = 3.1416 -1.000000 >> fclose(fid)