Операции над форматированными файлами
- [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 для длинного целого числа (например, %1d) или для числа с двойной точностью с плавающей запятой (например, % lg).
Примеры:
>
>
x
=
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