sprintf

Данные о формате в строку или вектор символов

Синтаксис

str = sprintf(formatSpec,A1,...,An)
[str,errmsg] = sprintf(formatSpec,A1,...,An)
str = sprintf(literalText)

Описание

пример

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) переводит последовательности символа ESC в 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'

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

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

    \xN

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

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

    \N

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

Советы

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

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

Ссылки

[1] Керниган, B. W., и Д. М. Ричи, язык программирования C, второй выпуск, Prentice-Hall, Inc., 1988.

[2] Спецификация X3.159-1989 ANSI: “Язык программирования C”, ANSI, 1 430 Broadway, Нью-Йорк, NY 10018.

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

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