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