Форматные преобразования 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 записывается единственная строка, строка форматных указателей может быть опущена.