Иллюстрированный самоучитель по Matlab

         

Операции над форматированными файлами


Файлы, содержащие форматированные данные, называют

форматированными файлами.

Ниже представлены функции, которые служат для работы с такими файлами.

line = fgetl (fid) — возвращает строку

из

файла с идентификатором fid с удалением символа конца строки. Если функция fgetl обнаруживает конец файла, то она возвращает значение -1 (см. функцию fopen с более подробным описанием fid);

line = f gets (fid) — возвращает строку из файла с идентификатором fid, не удаляя символ конца строки. Если функция fgets обнаруживает конец файла, то она возвращает значение -1;

line = fgets(fid.nchar) — возвращает не больше чем nchar первых символов строки. После признака конца строки или конца файла никакие дополнительные символы не считываются (см. примеры к функции fscanf);

count = fprintf(fid.format,A....) — форматирует данные, содержащиеся в действительной части матрицы А, под контролем строки format и записывает их в файл с идентификатором fid. Функция fprintf возвращает число записанных байтов. Значение идентификатора fid — целое число, возвращаемое функцией fopen.

Если опустить идентификатор fid в списке аргументов функции fprintf, то вывод будет осуществляться на экран, так же как при использовании стандартного вывода (fid=l).

fprintf(format,A....) — запись осуществляется на стандартное устройство — экран (но не в файл). Строка format определяет систему счисления, выравнивание, значащие цифры, ширину поля и другие атрибуты выходного формата. Она может содержать обычные буквы алфавита наряду со спецификаторами, знаками выравнивания и т. д.

Таблица 19.1.

Специальные символы в строках формата



Символ

Описание

\n

Новая строка

\t

Горизонтальная табуляция

\b

Возврат на один символ

\r

Возврат каретки

\f

Новая страница

\\

Обратный слеш

\" или "

Одиночная кавычка

%%

Процент

Функция fprintf ведет себя, как аналогичная функция fprintf О языка ANSI С и с некоторыми исключениями и расширениями. В табл. 19.1 описаны специальные символы, встречающиеся в строке format. Для вывода числовых или символьных данных в строке формата необходимо использовать


спецификаторы,

перечисленные в табл. 19.2.



Таблица 19.2.



Спецификаторы формата вывода данных



Спецификатор





Описание



 %d

Десятичная система обозначений (со знаком)



Одиночный символ



Экспоненциальное представление чисел с использованием символа «е» в нижнем

регистре, например 3.1415е + 00



Экспоненциальное представление чисел с использованием символа «Е» в верхнем

регистре, например 3.1415Е + 00

%f

Система обозначений с фиксированной точкой

%g

Наиболее компактный вариант из %е и %f. Незначащие нули не выводятся

%G

То же самое, что и %д, но используется верхний регистр для символа «Е»



Восьмеричная система обозначений (без знака)

%s

Строка символов

%u

Десятичная система обозначений (без знака)

%x

Шестнадцатеричная система обозначений с использованием символов нижнего регистра («a»...«f»)

%X

Шестнадцатеричная система обозначений с использованием верхнего регистра символов («A»...«F»)

Между знаком процента и буквой в спецификатор могут быть вставлены дополнительные символы. Их значение поясняет табл. 19.3.



Таблица 19.3.



Параметры спецификаторов формата



Символ





Описание





Пример



Знак «минус» (-)

Выравнивание преобразованных аргументов по левому краю

%-5.2d

Знак «плюс» (+)

Всегда печатать знак числа (+ или -)

%+5.2d

Ноль (0)

Заполнение нулями вместо пробелов

%05.2d

Цифры

Определяет минимальное число знаков, которые будут напечатаны

%6f

Цифры (после точки)

Число после точки определяет количество символов, печатаемых справа от десятичной точки

%6.2f

А = fscanf(fid,format) — читает все данные из файла с идентификатором, fid, преобразует их согласно значению параметра format и возвращает в виде матрицы А. Значение идентификатора fid — целое число, возвращаемое функцией fopen. Параметр format представляет собой строку, определяющую формат данных, которые необходимо прочитать;



[A,count] = fscanf(fid.format,size) — считывает количество данных, определенное параметром size, преобразует их в соответствии с параметром format и возвращает вместе с количеством успешно считанных элементов count. Параметр size — это произвольный аргумент, определяющий количество считываемых данных. Допустимы следующие значения:



n — чтение п элементов в вектор-столбец;

inf — чтение элементов до конца файла и помещение их в вектор-столбец, содержащий такое же количество элементов, что и в файле;

[m,n] — считывает столько элементов, сколько требуется для заполнения матрицы размера

тхп.

Заполнение происходит по столбцам. Величина n (но нет!) может принимать значение Inf.

Строка format состоит из обычных символов и (или) спецификаторов. Спецификаторы указывают тип считываемых данных и включают символ

%,

опцию ширины поля и символы формата. Возможные символы формата перечислены в табл. 19.4.



Таблица 19.4.



Символы формата, используемые функцией fscanf



Символ





Описание



%c

Последовательность символов; параметр ширины поля

определяет количество считываемых символов

%d

Десятичное число

%e, %f, %g

Число с плавающей точкой

%i

Целое число со знаком

%o

Восьмеричное число со знаком

%s

Последовательность непробельных символов

%u

Десятичное целое число со знаком

%x

Шестнадцатеричное целое число со знаком

[...]

Последовательность символов

Между символом

%

и символом формата допустимо вставлять следующие символы:

звездочка (*) означает, что соответствующее значение не нужно сохранять в выходной матрице;

строка цифр задает максимальную ширину поля;

буква обозначает размер полученного объекта: h для короткого целого числа (например, %n d), 1 для длинного целого числа (например, %ld) или для числа с двойной точностью с плавающей запятой (например,

%

lg



).

Примеры:

» х = 0:pi/10:pi:y-[x:sin(x)];

» fid = fopent 'c:\sin.txt'. V);

» fprintf(fid.'X5.3f *10.6f\n'.y):fclose(fid);

0.000 0.000000

0.314 0.309017

0.628 0.587785

0.942 0.809017

1.257 0.951057

1.571 1.000000

1.885 0.951057

2.199 0.809017

2.513 0.587785

2.827 0.309017

3.142 0.000000

» fid = fopen('c:\sin.txt'.'r');

» q=fscanf(fid.'*g'.[2.10]):

» q

'

ans =

0 0

0.3140 0.3090

0.6280 0.5878

0.9420 0.8090

1.2570 0.9511

1.5710 1.0000

1.8850 0.9511

2.1990 0.8090

2.5130 0.5878

2.8270 0.3090

 » fgetl(fid) 

ans =

3.142 0.000000 

» fgets(fid) 

ans =

-1

» fclose(fid) 

ans=

0


Содержание раздела