Форматирование текста

Чтобы преобразовать данные в текст и управлять его форматом, можно использовать операторы форматирования с общими функциями преобразования, такими как num2str и sprintf. Эти операторы управляют обозначением, выравниванием, значительными цифрами, и так далее. Они подобны используемым функцией printf на языке программирования C. Типичное использование для форматированного текста включает текст для дисплейных и выходных файлов.

Например, %f преобразовывает значения с плавающей точкой в текст с помощью представления с фиксированной точкой. Настройте формат путем добавления информации в оператор, такой как %.2f, чтобы представлять две цифры после десятичной метки или %12f, чтобы представлять 12 символов в выводе, дополнения пробелами по мере необходимости.

A = pi*ones(1,3);
txt = sprintf('%f | %.2f | %12f', A)
txt = 
'3.141593 | 3.14 |     3.141593'

Можно объединить операторы с обычным текстом и специальными символами в спецификаторе формата. Например, \n вставляет символ новой строки.

txt = sprintf('Displaying pi: \n %f \n %.2f \n %12f', A)
txt = 
    'Displaying pi: 
      3.141593 
      3.14 
          3.141593'

Функциями, которые поддерживают операторы форматирования, является compose, num2str, sprintf, fprintf и функции обработки ошибок assert, error, warning и MException.

Поля оператора форматирования

Оператор форматирования может иметь шесть полей, как показано в фигуре. Справа налево поля являются символом преобразования, подтипом, точностью, шириной поля, флагами и числовым идентификатором. (Пробелы не позволены в операторе. Они, как показывают, здесь только улучшают удобочитаемость фигуры.) Символ преобразования является единственным обязательным полем, наряду с ведущим символом %.

Символ преобразования

Символ преобразования задает обозначение вывода. Это состоит из отдельного символа и появляется в последний раз в спецификаторе формата.

Спецификатор

Описание

c

Отдельный символ.

d

Десятичная запись (подписывается).

e

Экспоненциальное представление (использующий строчный e, как в 3.1415e+00).

E

Экспоненциальное представление (использующий прописной E, как в 3.1415E+00).

f

Представление с фиксированной точкой.

g

Более компактный из %e или %f. (Незначительный обнуляет, не распечатывают.)

G

То же самое как %g, но использование прописного E.

o

Восьмеричное обозначение (без знака).

s

Вектор символов или массив строк.

u

Десятичная запись (без знака).

x

Шестнадцатеричное обозначение (использующие строчные буквы без знака af).

X

Шестнадцатеричное обозначение (использующие прописные буквы без знака AF).

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

A = 46*ones(1,4);
txt = sprintf('%d   %f   %e   %X', A)
txt = 
'46   46.000000   4.600000e+01   2E'

Подтип

Поле подтипа является отдельным буквенным символом, который сразу предшествует символу преобразования. Без поля подтипа символы преобразования %o, %x, %X и %u обрабатывают входные данные как целые числа. Чтобы обработать входные данные как значения с плавающей точкой вместо этого и преобразовать их в восьмеричные, десятичные, или шестнадцатеричные представления, используйте один из следующих спецификаторов подтипа.

b

Входные данные являются двойной точностью значения с плавающей точкой, а не беззнаковое целое. Например, чтобы распечатать значение с двойной точностью в шестнадцатеричном, используйте формат как %bx.

t

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

Точность

Поле точности в операторе форматирования является неотрицательным целым числом, которое сразу следует за периодом. Например, в операторе %7.3f, точностью является 3. Для оператора %g точность указывает на количество значительных цифр, чтобы отобразиться. Для %f, %e и операторов %E, точность указывает сколько цифр, чтобы отобразиться справа от десятичной точки.

Отобразите числа к различной точности с помощью поля точности.

txt = sprintf('%g   %.2g   %f   %.2f', pi*50*ones(1,4))
txt = 
'157.08   1.6e+02   157.079633   157.08'

В то время как можно задать точность в операторе форматирования для входного текста (например, в операторе %s), обычно нет никакой причины сделать так. Если вы задаете точность как p, и p является меньше, чем количество символов во входном тексте, то вывод содержит только первые символы p.

Ширина поля

Ширина поля в операторе форматирования является неотрицательным целым числом, которое задает количество цифр или символов в выводе при форматировании входных значений. Например, в операторе %7.3f, шириной поля является 7.

Задайте различную ширину поля. Чтобы показать ширину для каждого вывода, используйте символ |. По умолчанию синтезируемый текст дополнен пробелами, когда ширина поля больше, чем количество символов.

txt = sprintf('|%e|%15e|%f|%15f|', pi*50*ones(1,4))
txt = 
'|1.570796e+02|   1.570796e+02|157.079633|     157.079633|'

Когда используется на вводе текста, ширина поля может определить, заполнить ли синтезируемый текст пробелами. Если ширина поля меньше чем или равна количеству символов во входном тексте, то это не имеет никакого эффекта.

txt = sprintf('%30s', 'Pad left with spaces')
txt = 
'          Pad left with spaces'

Флаги

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

Символ

Описание

Пример

Знак "минус" (-)

Лево-выровняйте по ширине конвертированный аргумент в его поле.

%-5.2d

Знак "плюс" (+)

Для числовых значений всегда распечатывайте ведущий символ знака (+ или -).
Для текстовых значений право - выравнивает по ширине конвертированный аргумент в своем поле.

%+5.2d
%+5s

Пробел

Вставьте пробел перед значением.

% 5.2f

Нуль (0)

Заполните, обнуляет, а не пробелы.

%05.2f

Знак фунта (#)

Измените выбранные числовые преобразования:

  • Для %o %x или %X, распечатывает 0, 0x или префикс 0X.

  • Для %f %e или %E, распечатывает десятичную точку, даже когда точность 0.

  • Для %g или %G, не удаляйте конечные нули или десятичную точку.

%#5.0f

Право - и лево-выравнивает по ширине вывод. Поведение по умолчанию должно исправиться - выравнивают по ширине синтезируемый текст.

txt = sprintf('right-justify: %12.2f\nleft-justify: %-12.2f',...
              12.3, 12.3)
txt = 
    'right-justify:        12.30
     left-justify: 12.30       '

Отобразитесь + расписываются за положительные числа. Поведение по умолчанию должно не использовать ведущий +, расписываются за положительные числа.

txt = sprintf('no sign: %12.2f\nsign: %+12.2f',...
              12.3, 12.3)
txt = 
    'no sign:        12.30
     sign:       +12.30'

Заполните налево пробелами, и обнуляет. Поведение по умолчанию должно заполнить пробелами.

txt = sprintf('Pad with spaces: %12.2f\nPad with zeroes: %012.2f',...
              5.2, 5.2)
txt = 
    'Pad with spaces:         5.20
     Pad with zeroes: 000000005.20'

Примечание

Можно задать больше чем один флаг в операторе форматирования.

Идентификаторы значения

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

Упорядоченный последовательноУпорядоченный идентификатором
sprintf('%s %s %s',...
        '1st','2nd','3rd')

ans =

    '1st 2nd 3rd'
sprintf('%3$s %2$s %1$s',...
        '1st','2nd','3rd')

ans =

    '3rd 2nd 1st'

Специальные символы

Специальные символы могут быть частью синтезируемого текста. Но потому что они не могут быть введены как обычный текст, они требуют, чтобы определенные последовательности символов представляли их. Чтобы вставить специальные символы в синтезируемый текст, используйте любую из последовательностей символов в таблице.

Специальный символ

Представление в спецификаторе формата

Одна кавычка

''

Символ процента

%%

Наклонная черта влево

\\

Предупреждение

\a

Клавиша Backspace

\b

Перевод формата

\f

Новая строка

\n

Возврат каретки

\r

Горизонтальная вкладка

\t

Вертикальная вкладка

\v

Символ, числовое значение Unicode® которого может быть представлено шестнадцатеричным номером, N

\xN

Пример: sprintf('\x5A') возвращает 'Z'

Символ, числовое значение Unicode которого может быть представлено восьмеричным числом, N

\N

Пример: sprintf('\132') возвращает 'Z'

Установка ширины поля и точности

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

Правила для форматирования точности и ширины поля

Фигура иллюстрирует, как ширина поля и настройки точности влияют на вывод функций форматирования. В этой фигуре нуль после % входит в систему средние значения оператора форматирования, чтобы добавить, что продвижение обнуляет к синтезируемому тексту, а не пробелам.

  • Если точность не задана, то она принимает значение по умолчанию к шесть.

  • Если точность, p является меньше, чем количество цифр в дробной части входа, то только цифры p показывают после десятичной точки. Дробное значение округлено в выводе.

  • Если точность, p больше, чем количество цифр f в дробной части входа, то цифры p показывают после десятичной точки. Дробная часть расширена направо с p-f, обнуляет в выводе.

  • Если ширина поля не задана, то она принимает значение по умолчанию к p+1+n, где n является количеством цифр в целой части входного значения.

  • Если ширина поля, w больше, чем p+1+n, то целая часть выходного значения дополнена налево с w-(p+1+n) дополнительные символы. Дополнительные символы являются пробелами, если оператор форматирования не включает флаг 0. В этом случае дополнительные символы, обнуляет.

Определение ширины поля и точности вне спецификатора формата

Можно задать ширину поля и точность с помощью значений из последовательного списка аргументов. Используйте звездочку (*) вместо полей ширины поля или точности оператора форматирования.

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

txt = sprintf('%*f   %.*f   %*.*f',...
              15,123.45678,...     
              3,16.42837,...       
              6,4,pi)
txt = 
'     123.456780   16.428   3.1416'

Таблица описывает эффекты каждого оператора форматирования в примере.

Оператор форматирования

Описание

%*f

Задайте ширину как следующий входной параметр, 15.

%.*f

Задайте точность как следующий входной параметр, 3.

%*.*f

Задайте ширину и точность как следующие входные параметры, 6 и 4.

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

txt = sprintf('%*.2f', 5, 123.45678)
txt = 
'123.46'

Определение пронумерованных идентификаторов по ширине и полей точности

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

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

txt = sprintf('%1$*4$f   %2$.*5$f   %3$*6$.*7$f',...
              123.45678, 16.42837, pi, 15, 3, 6, 4)
txt = 
'     123.456780   16.428   3.1416'

Таблица описывает эффект каждого оператора форматирования в примере.

Оператор форматирования

Описание

%1$*4$f

1$ задает первый входной параметр, 123.45678, как значение

*4$ задает четвертый входной параметр, 15, как ширина поля

%2$.*5$f

2$ задает второй входной параметр, 16.42837, как значение

.*5$ задает пятый входной параметр, 3, как точность

%3$*6$.*7$f

3$ задает третий входной параметр, pi, как значение

*6$ задает шестой входной параметр, 6, как ширина поля

.*7$ задает седьмой входной параметр, 4, как точность

Ограничения на Использование идентификаторов

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

Допустимый синтаксисНедопустимый синтаксис
sprintf('%d %d %d %d',...
        1,2,3,4)

ans =

    '1 2 3 4'
sprintf('%d %3$d %d %d',...
        1,2,3,4)

ans =

    '1 '

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

Допустимый синтаксисНедопустимый синтаксис
sprintf('%d',1,2,3,4)

ans =

    '1234'
sprintf('%1$d',1,2,3,4)

ans =

    '1'

Если вы используете пронумерованные идентификаторы, когда входные данные являются вектором или массивом, то вывод не содержит отформатированные данные.

Допустимый синтаксисНедопустимый синтаксис
v = [1.4 2.7 3.1];
sprintf('%.4f %.4f %.4f',v)

ans =

    '1.4000 2.7000 3.1000'
v = [1.4 2.7 3.1];
sprintf('%3$.4f %1$.4f %2$.4f',v)

ans =

  1×0 empty char array

Смотрите также

| | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте