sprintf

Форматируйте данные в строку или вектор символов

Описание

пример

str = sprintf(formatSpec,A1,...,An) форматирует данные в массивах A1,...,An использование операторов форматирования, заданных как formatSpec и возвращает получившийся текст в str. sprintf функция форматирует значения в A1,...,An в порядке столбца. Если formatSpec является строкой, тогда как и вывод str. В противном случае str является вектор символов.

Чтобы вернуть несколько фрагментов форматированного текста как строковые массивы или массив ячеек из векторов символов, используйте compose функция.

[str,errmsg] = sprintf(formatSpec,A1,...,An) возвращает сообщение об ошибке как вектор символов, если операция не выполнена. В противном случае errmsg пуст.

str = sprintf(literalText) перемещает последовательности escape-символов в literalText, таких как \n и \t. Все остальные символы возвращаются неизменными. Если literalText содержат оператор форматирования (например %f), затем str отбрасывает его и все символы после.

Примеры

свернуть все

Форматируйте число с плавающей запятой используя %e, %f, и %g спецификаторы.

A = 1/eps;
str_e = sprintf('%0.5e',A)
str_e = 
'4.50360e+15'
str_f = sprintf('%0.5f',A)
str_f = 
'4503599627370496.00000'
str_g = sprintf('%0.5g',A)
str_g = 
'4.5036e+15'

Объедините буквенный текст со значениями массива, чтобы создать вектор символов.

formatSpec = 'The array is %dx%d.';
A1 = 2;
A2 = 3;
str = sprintf(formatSpec,A1,A2)
str = 
'The array is 2x3.'

Чтобы вернуть форматированный текст в виде строки, задайте formatSpec как строка вместо вектора символов, когда вы вызываете sprintf функция.

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

formatSpec = "The current time is: %d:%d %s";
A1 = 11;
A2 = 20;
A3 = 'a.m.';
str = sprintf(formatSpec,A1,A2,A3)
str = 
"The current time is: 11:20 a.m."

Преобразуйте входную строку. Входы массивы, которые содержат текст, могут быть векторы символов или строки.

A1 = 2;
A2 = 35;
A3 = "p.m.";
str = sprintf(formatSpec,A1,A2,A3)
str = 
"The current time is: 2:35 p.m."

Явно преобразуйте значения двойной точности в целые числа.

str = sprintf('%d',round(pi))
str = 
'3'

Задайте минимальную ширину напечатанного значения.

str = sprintf('%025d',[123456])
str = 
'0000000000000000000123456'

The 0 флаг в %025d формата спецификатора запрашивает начальные нули в выходах.

Переупорядочить входные значения с помощью n$ позиционный идентификатор.

A1 = 'X';
A2 = 'Y';
A3 = 'Z';
formatSpec = ' %3$s %2$s %1$s';
str = sprintf(formatSpec,A1,A2,A3)
str = 
' Z Y X'
C = { 1,   2,   3 ;
     'AA','BB','CC'};

str = sprintf(' %d %s',C{:})
str = 
' 1 AA 2 BB 3 CC'

Синтаксис C{:} создает разделенный списками , разделенными запятыми массивов, которые содержат содержимое каждой камеры из C в порядке столбца. Для примера, C{1}==1 и C{2}=='AA'.

Входные параметры

свернуть все

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

Если formatSpec включает буквенные тексты, представляющие побочные символы, такие как \n, затем sprintf преобразует символы побега.

formatSpec может быть вектор символов в одинарных кавычках или, начиная с R2016b, строковым скаляром.

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

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

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

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

Тип значенияПреобразованиеПодробнее

Целое число, со знаком

%d или %i

Основа 10

Целое число, без знака

%u

Основа 10

%o

База 8 (октальная)

%x

База 16 (шестнадцатеричная), строчные буквы af

%X

То же, что и %x, заглавные буквы AF

Число с плавающей запятой

%f

Обозначение с фиксированной точкой (Используйте оператор точности, чтобы задать количество цифр после десятичной точки.)

%e

Экспоненциальное обозначение, такое как 3.141593e+00 (Используйте оператор точности, чтобы задать количество цифр после десятичной точки.)

%E

То же, что и %e, но в верхнем регистре, например 3.141593E+00 (Используйте оператор точности, чтобы задать количество цифр после десятичной точки.)

%g

Чем компактнее %e или %f, без конечных нулей (Используйте оператор точности, чтобы задать количество значащих цифр.)

%G

Чем компактнее %E или %f, без конечных нулей (Используйте оператор точности, чтобы задать количество значащих цифр.)

Символы или строки

%c

Один символ

%s

Вектор символов или строковые массивы. Тип выходного текста совпадает с типом formatSpec.

Необязательные операторы

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

  • Идентификатор

    Порядок обработки входных аргументов функции. Используйте синтаксис n$, где n представляет положения других входных параметров в вызове функции.

    Пример: ('%3$s %2$s %1$s %2$s','A','B','C') печатает входные параметры 'A', 'B', 'C' следующим образом: C B A B.

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

  • Флаги

    '–'

    Слева-оправдать.
    Пример: %-5.2f
    Пример: %-10s

    '+'

    Всегда печатайте символ (+ или -) для любого числового значения.
    Пример: %+5.2f
    Текст с выравниванием по правому краю.
    Пример: %+10s

    ' '

    Вставьте пространство перед значением.
    Пример: % 5.2f

    '0'

    Заполните до ширины поля нулями перед значением.
    Пример: %05.2f

    '#'

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

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

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

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

    Пример: %#5.0f

  • Ширина поля

    Минимальное количество символов для печати. Оператор ширины поля может быть числом или звездочкой (*) для ссылки на входной параметр.

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

    Пример: Входные параметры ('%12d',intmax) эквивалентны ('%*d',12,intmax).

    Пример: Входные параметры ('%*d',[2 10 5 100]) возврат '10 100', с двумя пространствами, выделенными для 10 и пять пространств для 100. В качестве альтернативы можно также задать ширины и значения полей как несколько аргументов, как в ('%*d',2,10,5,100).

    Функция заполняет поле шириной пространств перед значением, если иное не задано флагами.

  • Точность

    Для %f, %e, или %E

    Количество цифр справа от десятичной точки
    Пример: '%.4f' печатает pi как '3.1416'

    Для %g или %G

    Количество значащих цифр
    Пример: '%.4g' печатает pi как '3.142'

    Оператор точности может быть числом или звездочкой (*) для ссылки на аргумент.

    Когда вы задаете * как оператор точности поля, другие входные параметры должны обеспечивать и точность, и значение, которое должно быть напечатано. Точности и значения могут быть парами аргументов или парами в числовом массиве. С * как оператор точности, вы можете печатать различные значения к различным точностям.

    Когда вы задаете *.* как ширина поля и операторы точности, необходимо задать ширины поля, точности и значения как триплеты.

    Пример: Входные параметры ('%.4f',pi) эквивалентны ('%.*f',4,pi).

    Пример: Входные параметры ('%6.4f',pi) эквивалентны ('%.*f',6,4,pi).

    Пример: Входные параметры ('%*.*f',6,4,pi,9,6,exp(1)) возврат '3.1416 2.718282', с 9 и 6 как ширина поля и точность для выхода exp(1).

    Примечание

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

  • Подтипы

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

    Вход значения

    Подтип и символ преобразования

    Выход значения

    Число с плавающей запятой

    %bx или %bX
    %bo
    %bu

    Шестнадцатеричное, восьмеричное или десятичное значение двойной точности
    Пример: %bx печатает pi как 400921fb54442d18

    %tx или %tX
    %to
    %tu

    Шестнадцатеричное, восьмеричное или десятичное значение с одной точностью
    Пример: %tx печатает pi как 40490fdb

Текст до или после операторов форматирования

formatSpec может также включать дополнительный текст перед знаком процента, %, или после символа преобразования. Текст может быть:

  • Обычный текст для печати.

  • Специальные символы, которые вы не можете ввести как обычный текст. В этой таблице показано, как представлять специальные символы в formatSpec.

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

    Представление

    Одинарная кавычка

    ''

    Процент символа

    %%

    Обратная косая черта

    \\

    Тревога

    \a

    Клавиша Backspace

    \b

    Подача формы

    \f

    Новая линия

    \n

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

    \r

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

    \t

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

    \v

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

    \xN

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

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

    \N

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

Заметное поведение преобразований с операторами форматирования

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

  • Если вы задаете преобразование, которое не соответствует данным, такое как преобразование текста для числового значения, MATLAB® переопределяет заданное преобразование и использует %e.

    Пример: '%s' преобразует pi на 3.141593e+00.

  • Если вы применяете преобразование текста (либо %c или %s) в целочисленные значения, MATLAB преобразует значения, которые соответствуют допустимым символьным кодам, в символы.

    Пример: '%s' преобразует [65 66 67] на ABC.

Числовые, символьные или строковые массивы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

Входной текст без операторов форматирования, заданный как вектор символов или строковый скаляр. sprintf переводит любые последовательности escape-символов в literalText.

Типы данных: char | string

Выходные аргументы

свернуть все

Форматированный текст, возвращенный как вектор символов или строковый скаляр. Тип выхода совпадает с типом formatSpec.

Сообщение об ошибке, возвращаемое как вектор символов, когда операция неудачна. В противном случае errmsg пуст.

Совет

  • The sprintf функция подобна fprintf, но fprintf печать в файл или в Командное окно.

  • Спецификаторы формата для функций чтения sscanf и fscanf отличаются от форматов функций записи sprintf и fprintf. Функции считывания не поддерживают поле точности. Поле width задает минимум для записи, но максимум для чтения.

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

    Пример: Если formatSpec является 'value = %z', затем sprintf печатает 'value =' потому что %z не является оператором форматирования.

    Пример: Если formatSpec является 'character \x99999 = %s', затем sprintf печатает 'character' потому что \x99999 не является допустимым специальным символом.

Ссылки

[1] Kernighan, B. W., and D. M. Ritchie, The C Programming Language, Second Edition, Prentice Hall, Inc., 1988.

[2] Спецификация ANSI X3.159-1989: «Programming Language C», ANSI, 1430 Broadway, New York, NY 10018.

Расширенные возможности

.
Представлено до R2006a