Операции над форматированными файлами
Файлы, содержащие
форматированные данные, называют
форматированными файлами.
Ниже представлены
функции, которые служат для работы с такими файлами.
-
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.
Специальные символы в строках формата
Функция fprintf
ведет себя, как аналогичная функция fprintf О языка ANSI С и с некоторыми исключениями
и расширениями. В табл. 19.1 описаны специальные символы, встречающиеся в строке
format. Для вывода числовых или символьных данных в строке формата необходимо
использовать
спецификаторы,
перечисленные в табл. 19.2.
Таблица
19.2.
Спецификаторы формата вывода данных
|
|
|
|
|
%d
|
Десятичная система обозначений (со знаком)
|
|
|
%с
|
Одиночный
символ
|
|
|
|
Экспоненциальное
представление чисел с использованием символа «е» в нижнем
регистре, например
3.1415е + 00
|
|
|
|
|
Экспоненциальное
представление чисел с использованием символа «Е» в верхнем
регистре, например
3.1415Е + 00
|
|
|
|
|
Система
обозначений с фиксированной точкой
|
|
|
|
Наиболее
компактный вариант из %е и %f. Незначащие нули не выводятся
|
|
|
|
То
же самое, что и %д, но используется верхний регистр для символа «Е»
|
|
|
|
Восьмеричная
система обозначений (без знака)
|
|
|
|
|
|
|
|
Десятичная
система обозначений (без знака)
|
|
|
|
Шестнадцатеричная
система обозначений с использованием символов нижнего регистра («a»...«f»)
|
|
|
|
|
Шестнадцатеричная
система обозначений с использованием верхнего регистра символов («A»...«F»)
|
|
Между знаком
процента и буквой в спецификатор могут быть вставлены дополнительные символы.
Их значение поясняет табл. 19.3.
Таблица
19.3.
Параметры спецификаторов формата
|
|
|
|
|
|
Выравнивание
преобразованных аргументов по левому краю
|
|
|
|
Всегда
печатать знак числа (+ или -)
|
|
|
|
Заполнение
нулями вместо пробелов
|
|
|
|
Определяет
минимальное число знаков, которые будут напечатаны
|
|
|
|
Число
после точки определяет количество символов, печатаемых справа от десятичной
точки
|
|
-
А = 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
|
|
|
|
|
|
|
|
Последовательность
символов; параметр ширины поля
определяет
количество считываемых символов
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Восьмеричное
число со знаком
|
|
|
|
|
Последовательность
непробельных символов
|
|
|
|
|
Десятичное
целое число со знаком
|
|
|
|
|
Шестнадцатеричное
целое число со знаком
|
|
|
|
|
Последовательность
символов
|
|
|
|
|
|
|
Между символом
%
и символом формата допустимо вставлять следующие символы:
-
звездочка
(*) означает, что соответствующее значение не нужно сохранять в выходной
матрице;
-
строка
цифр задает максимальную ширину поля;
-
буква
обозначает размер полученного объекта: 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
|