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

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

Функциями, которые поддерживают операторы форматирования, является composenum2strsprintffprintf, и обработка ошибок функционирует assertошибкаПредупреждение, и 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'

Подтип

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

b

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

t

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

Точность

Поле точности в операторе форматирования является неотрицательным целым числом, которое сразу следует за периодом. Например, в операторе %7.3f, точностью является 3. Для %g оператор, точность указывает на количество значительных цифр, чтобы отобразиться. Для %fE, и %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 'characters'.

Ширина поля

Ширина поля в операторе форматирования является неотрицательным целым числом, которое задает количество цифр или символов в выходе при форматировании входных значений. Например, в операторе %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

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

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

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

  • Для %fE, или %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

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

| | |

Похожие темы