![]() |
![]() |
![]() |
Операции над форматированными файлами
Файлы, содержащие форматированные данные, называют форматированными файлами. Ниже представлены функции, которые служат для работы с такими файлами.
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
![]() |
![]() |
![]() |