Операции над форматированными файлами
Файлы, содержащие форматированные данные, называют
форматированными файлами.
Ниже представлены функции, которые служат для работы с такими файлами.
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.
Параметры спецификаторов формата
Символ |
Описание |
Пример |
Знак «минус» (-) |
Выравнивание преобразованных аргументов по левому краю |
%-5.2d |
Знак «плюс» (+) |
Всегда печатать знак числа (+ или -) |
%+5.2d |
Ноль (0) |
Заполнение нулями вместо пробелов |
%05.2d |
Цифры |
Определяет минимальное число знаков, которые будут напечатаны |
%6f |
Цифры (после точки) |
Число после точки определяет количество символов, печатаемых справа от десятичной точки |
%6.2f |
[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