Форматные преобразования fprintf.

На практике символьная информация почти всегда перемежается с числовыми данными, которые могут быть тем или иным способом преобразованы из машинного формата в соответствующие поля строки. Таким конвертированием данных из внутреннего представления в символьное управляют форматные указатели, задаваемые в качестве одного из параметров функции fprintf.

Форматные указатели всегда начинаются с символа %. Управляющая комбинация '\n', следующая за форматным указателем – признак конца строки. Литеральные константы включаются в выводимую строку без каких-либо преобразований. К литеральным константам в последнем примере относится, в частности, признак конца строки. Количество указателей в строке форматов может не соответствовать количеству преобразуемых данных. Если длина списка формальных указателей меньше, чем количество преобразуемых данных, то список циклически повторяется. Так, например, имеем (например, в режиме командной строки):

>> fprintf('%5d',1,2,3,4) 1 2 3 4

Форматный указатель '%5d' в данном случае повторился четыре раза. Если количество указателей формата превышает длину выводимого списка, то лишние форматные указатели игнорируются:

>> fprintf('%d %f %e',4,7) 4 7.000000

Данные, подлежащие преобразованию перед записью в файл, задаются третьим и последующими аргументами входными аргументами функции fprintf. Так, например, если требуется записать в очередную строку текстового файла два целых и одно вещественное значения переменных x, y и z, то это можно реализовать следующим образом:

>> x=123; >> y=2015; >> z=2.34567; >> fprintf('%5d %d %8.3f\n',x,y,z); 123 2015 2.346

Значение переменной x преобразуется в формат целого числа (свидетельством этому является буква d в первом форматном указателе) и для его записи в выводной строке отводится 5 позиций. Между первым и вторым форматными указателями располагается один пробел, который считается литерной константой, разделяющей первое и второе числа. Значение переменной y преобразуется по формату %d и занимает в выводной строке 4 позиции. После второго числа вставляется еще один литеральный пробел, расположенный между вторым и третьим указателями формата. Следующие 8 позиций отведены для результата преобразования вещественного числа (свидетельством этому является буква f в третьем форматном указателе), у которого сохраняются три значащие цифры в дробной части (результат форматного преобразования при этом округляется в соответствии с общепринятыми математическими правилами).

В целом, следует отметить, что форматные указатели, используемые в функции fprintf, были привнесены в MATLAB после определенной модификации из языка программирования C++. Одной из важнейших модификаций в этом смысле является возможность использования матрицы в качестве элемента выводного списка (в этом случае список форматных указателей определяет преобразование каждого элемента очередного столбца матрицы).

В общем случае указатель формата начинается с символа '%', после которого могут быть расположены три необязательные компоненты – флажки, ширина (w) и точность (.n). Указатель завершается при этом одним из символов, характеризующих тип преобразования данных, некоторые из которых представлены в таблице 1.9.2. Следует отметить, что использование целочисленных форматов (%d, %i, %u, %x, %X, %o) предполагает, что преобразуемое значение в самом деле является целым. При использовании целочисленных форматов для преобразования вещественного значения, перед выводом в файл такие величины необходимо округлить с помощью соответствующих функций (fix, round, floor или ceil).

Таблица 1.9.2. Символы, характеризующие тип преобразования данных.

Символ формата Формат результата
d Преобразование целочисленного значения в десятичное число со знаком
u Преобразование целочисленного значения в десятичное число без знака
f Преобразование числового значения в вещественное число с фиксированной точкой
е Преобразование числового значения в вещественное число с плавающей точкой (признак порядка – буква е)
E Преобразование числового значения в вещественное число с плавающей точкой (признак порядка – буква E)
g Преобразование числового значения в вещественное число с фиксированной или плавающей точкой в зависимости от того, какой формат числа занимает меньше места (незначащие нули в дробной части не выводятся)
G Преобразование числового значения в вещественное число с фиксированной или плавающей точкой в зависимости от того, какой формат числа занимает меньше места (незначащие нули в дробной части не выводятся)
s Преобразование текстового значения в строку символов.
c Преобразование единственного символа

Среди литеральных констант в командной строке кроме уже упомянутого ранее признака конца строки ('\n') могут использоваться и другие управляющие символы – Esc-последовательности (см. таблицу 1.9.3).

Таблица 1.9.3. Esc-последовательности.

Символ Описание
\b Удаление предшествующего символа (Backspace)
\f Перевод страницы (Form feed)
\n Перевод строки (New line)
\r Возврат каретки (Carriage return)
\t Горизонтальная табуляция (Horizontal tab)

Некоторые символы командной строки задействованы как управляющие:

– с символа % начинается форматный указатель;

– одиночная кавычка ' открывает и закрывает строку форматов;

– обратная косая черта \ использована в Esc-последовательностях.

Для включения таких символов в состав литеральных констант и демонстрации их явного отличия (во избежание путаницы) от управляющих комбинаций, в форматной строке действуют следующие соглашения:

– %% – воспринимается как символ процента;

– \\ – воспринимается как обратная косая черта;

– '' – воспринимается как одиночная кавычка;

– \” – воспринимается как двойная кавычка.

Заметим, что в случае, если в текстовый файл с помощью функции fprintf записывается единственная строка, строка форматных указателей может быть опущена.