Операции над форматированными файлами
- [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.0000000.314 0.3090170.628 0.5877850.942 0.8090171.257 0.9510571.571 1.0000001.885 0.9510572.199 0.8090172.513 0.5877852.827 0.3090173.142 0.000000>> fid = fopen('c:\sin.txt'.'r'); >> q=fscanf(fid.'*g'.[2.10]): >> q ans =0 00.3140 0.30900.6280 0.58780.9420 0.80901.2570 0.95111.5710 1.00001.8850 0.95112.1990 0.80902.5130 0.58782.8270 0.3090>> fgetl(fid) ans =3.142 0.000000>> fgets(fid) ans =-1>> fclose(fid) ans=0