Матричная лаборатория 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

 

Назад Начало Вперед