Main Content

sprintf

Establecer el formato de datos como cadena o vector de caracteres

Descripción

ejemplo

str = sprintf(formatSpec,A1,...,An) establece el formato de los datos de los arreglos A1,...,An utilizando los operadores de formato especificados por formatSpec y devuelve el texto resultante en str. La función sprintf establece el formato de los valores de A1,...,An en el orden de la columna. Si formatSpec es una cadena, también lo es el valor de salida str. De lo contrario, str es un vector de caracteres.

Para devolver varios fragmentos de texto con formato como un arreglo de cadenas o un arreglo de celdas de vectores de caracteres, utilice la función compose.

[str,errmsg] = sprintf(formatSpec,A1,...,An) devuelve un mensaje de error como un vector de caracteres cuando la operación no se realiza correctamente. De lo contrario, errmsg está vacío.

str = sprintf(literalText) traduce las secuencias de caracteres de escape en literalText, como \n y \t. Devuelve todos los demás caracteres sin cambios. Si literalText contiene un operador de formato (como %f), str lo descarta junto con todos los caracteres que le siguen.

Ejemplos

contraer todo

Establezca el formato de un número de punto flotante utilizando los especificadores %e, %f y %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'

Combine texto literal con valores de arreglos para crear un vector de caracteres.

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

Para devolver el texto con formato como una cadena, especifique formatSpec como una cadena, en lugar de un vector de caracteres, cuando llame a la función sprintf.

Convierta los datos y devuelva el resultado como una cadena.

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."

Convierta una cadena de entrada. Los arreglos de entrada que contienen texto pueden ser vectores de caracteres o cadenas.

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

Convierta de forma explícita valores de doble precisión a enteros.

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

Especifique el ancho mínimo del valor impreso.

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

El indicador 0 del especificador de formato %025d requiere ceros a la izquierda en el valor de salida.

Reordene los valores de entrada utilizando el identificador de posición 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'

La sintaxis C{:} crea una lista separada por comas de arreglos que presentan el contenido de cada celda de C en el orden de la columna. Por ejemplo, C{1}==1 y C{2}=='AA'.

Argumentos de entrada

contraer todo

Formato de los campos de salida, especificado con operadores de formato. formatSpec también puede incluir texto normal y caracteres especiales.

Si formatSpec incluye texto literal que representa caracteres de escape, como \n, sprintf traduce los caracteres de escape.

formatSpec puede ser un vector de caracteres en comillas simples o un escalar de cadena.

Operador de formato

Los operadores de formato comienzan por el símbolo de porcentaje, %, y terminan con un carácter de conversión. El carácter de conversión es obligatorio. De forma opcional, puede especificar operadores de identificador, indicador, anchura de campo y subtipo entre % y el carácter de conversión (no se permiten espacios entre operadores; solo se muestran aquí por motivos de legibilidad).

Schematic of formatting operator characters.

Carácter de conversión

Esta tabla muestra los caracteres de conversión a formato numérico y los datos de caracteres como texto.

Tipo de valorConversiónDetalles

Entero, con signo

%d o %i

Base 10

Entero, sin signo

%u

Base 10

%o

Base 8 (octal)

%x

Base 16 (hexadecimal), minúsculas a-f

%X

Igual que %x, mayúsculas A-F

Número de punto flotante

%f

Notación de punto fijo (use un operador de precisión para especificar el número de dígitos después del separador decimal).

%e

Notación exponencial, como 3.141593e+00 (use un operador de precisión para especificar el número de dígitos después del separador decimal).

%E

Igual que %e pero en mayúsculas, como 3.141593E+00 (use un operador de precisión para especificar el número de dígitos después del separador decimal).

%g

%e o %f, lo que sea más compacto, sin ceros finales (use un operador de precisión para especificar el número de dígitos significativos).

%G

%E o %f, lo que sea más compacto, sin ceros finales (use un operador de precisión para especificar el número de dígitos significativos).

Caracteres o cadenas

%c

Carácter único

%s

Vector de caracteres o arreglo de cadena. El tipo de texto de salida es el mismo que el tipo de formatSpec.

Operadores opcionales

Los operadores opcionales de identificador, indicador, anchura de campo y subtipo contribuyen a definir el formato del texto de salida.

  • Identificador

    Orden para procesar los argumentos de entrada de función. Utilice la sintaxis n$, donde n representa las posiciones de los otros argumentos de entrada de la llamada a la función.

    Ejemplo: ('%3$s %2$s %1$s %2$s','A','B','C') imprime los argumentos de entrada como 'A', 'B', 'C' según sigue: C B A B.

    Nota: Si un argumento de entrada es un arreglo, no puede utilizar identificadores para especificar elementos del arreglo concretos desde ese argumento de entrada.

  • Indicadores

    '–'

    Justifica a la izquierda.
    Ejemplo: %-5.2f
    Ejemplo: %-10s

    '+'

    Imprime siempre un carácter de símbolo (+ o –) para cualquier valor numérico.
    Ejemplo: %+5.2f
    Justifica el texto a la derecha.
    Ejemplo: %+10s

    ' '

    Inserta un espacio antes del valor.
    Ejemplo: % 5.2f

    '0'

    Rellena la anchura del campo con ceros antes del valor.
    Ejemplo: %05.2f

    '#'

    Modifica las conversiones numéricas seleccionadas:

    • En el caso de %o, %x o %X, imprime el prefijo 0, 0x o 0X.

    • En el caso de %f, %e o %E, imprime el separador decimal incluso si la precisión es 0.

    • En el caso de %g o %G, no elimina los ceros finales ni el separador decimal.

    Ejemplo: %#5.0f

  • Anchura de campo

    Número mínimo de caracteres que imprimir. El operador de anchura de campo puede ser un número o un asterisco (*) para referirse a un argumento de entrada.

    Al especificar * como operador de anchura de campo, los otros argumentos de entrada deben proporcionar una anchura y un valor para su impresión. Las anchuras y los valores pueden ser pares de argumentos o pares dentro de un arreglo numérico. Con * como operador de anchura de campo, puede imprimir valores diferentes con distintas anchuras.

    Ejemplo: Los argumentos de entrada ('%12d',intmax) equivalen a ('%*d',12,intmax).

    Ejemplo: Los argumentos de entrada ('%*d',[2 10 5 100]) devuelven '10 100', con dos espacios asignados para 10 y cinco espacios para 100. De forma alternativa, también puede especificar las anchuras de campo y los valores como argumentos múltiples, al igual que en ('%*d',2,10,5,100).

    La función rellena la anchura del campo con espacios antes del valor, a menos que haya indicadores que especifiquen lo contrario.

  • Precisión

    Para %f, %e o %E

    Número de dígitos a la derecha del separador decimal
    Ejemplo: '%.4f' imprime pi como '3.1416'

    Para %g o %G

    Número de dígitos significativos
    Ejemplo: '%.4g' imprime pi como '3.142'

    El operador de precisión puede ser un número o un asterisco (*) para referirse a un argumento.

    Al especificar * como operador de anchura de precisión de campo, los otros argumentos de entrada deben proporcionar una precisión y un valor para su impresión. Las precisiones y los valores pueden ser pares de argumentos o pares dentro de un arreglo numérico. Con * como operador de precisión, puede imprimir valores diferentes con distintas precisiones.

    Al especificar *.* como operador de anchura de campo y de precisión, debe especificar las anchuras de campo, las precisiones y los valores como tripletes.

    Ejemplo: Los argumentos de entrada ('%.4f',pi) equivalen a ('%.*f',4,pi).

    Ejemplo: Los argumentos de entrada ('%6.4f',pi) equivalen a ('%*.*f',6,4,pi).

    Ejemplo: Los argumentos de entrada ('%*.*f',6,4,pi,9,6,exp(1)) devuelven '3.1416 2.718282', con 9 y 6 como anchura de campo y precisión para la salida de exp(1).

    Nota

    Si especifica un operador de precisión para valores de punto flotante que supera la precisión del tipo de datos numéricos de entrada, es posible que los resultados no coincidan con los valores de entrada de la precisión que haya especificado. El resultado depende del hardware y el sistema operativo del ordenador.

  • Subtipos

    Puede utilizar un operador de subtipo para imprimir un valor de punto flotante con su valor octal, decimal o hexadecimal. El operador de subtipo precede inmediatamente al carácter de conversión. Esta tabla muestra las conversiones que pueden utilizar subtipos.

    Tipo de valor de entrada

    Subtipo y carácter de conversión

    Tipo de valor de salida

    Número de punto flotante

    %bx o %bX
    %bo
    %bu

    Valor hexadecimal, octal o decimal de doble precisión
    Ejemplo: %bx imprime pi como 400921fb54442d18

    %tx o %tX
    %to
    %tu

    Valor hexadecimal, octal o decimal de precisión simple
    Ejemplo: %tx imprime pi como 40490fdb

Texto antes o después de los operadores de formato

formatSpec también puede incluir texto adicional antes de un símbolo de porcentaje, %, o después de un carácter de conversión. El texto puede ser:

  • Texto normal que imprimir.

  • Caracteres especiales que no se pueden introducir como texto normal. Esta tabla muestra cómo representar caracteres especiales en formatSpec.

    Carácter especial

    Representación

    Comilla simple

    ''

    Carácter de porcentaje

    %%

    Barra invertida

    \\

    Alarma

    \a

    Retroceso

    \b

    Salto de impresión

    \f

    Nueva línea

    \n

    Retorno de carro

    \r

    Tabulación horizontal

    \t

    Tabulación vertical

    \v

    Carácter cuyo valor numérico Unicode® se puede representar mediante el número hexadecimal, N

    \xN

    Ejemplo: sprintf('\x5A') devuelve 'Z'

    Carácter cuyo valor numérico Unicode se puede representar mediante el número octal, N

    \N

    Ejemplo: sprintf('\132') devuelve 'Z'

Comportamiento notable de las conversiones con operadores de formato

  • Las conversiones numéricas solo imprimen el componente real de números complejos.

  • Si especifica una conversión que no se corresponde con los datos, como una conversión de texto para un valor numérico, MATLAB® anula la conversión especificada y utiliza %e.

    Ejemplo: '%s' convierte pi a 3.141593e+00.

  • Si aplica una conversión de texto (%c o %s) a valores enteros, MATLAB convierte los valores que se corresponden con códigos de caracteres válidos a caracteres.

    Ejemplo: '%s' convierte [65 66 67] a ABC.

Arreglos numéricos, de caracteres o cadenas.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

Texto de entrada sin operadores de formato, especificado como vector de caracteres o escalar de cadena. sprintf traduce cualquier secuencia de caracteres de escape en literalText.

Tipos de datos: char | string

Argumentos de salida

contraer todo

Texto con formato, devuelto como vector de caracteres o escalar de cadena. El tipo de salida coincide con el tipo de formatSpec.

Mensaje de error, devuelto como vector de caracteres, cuando la operación no se realiza correctamente. De lo contrario, errmsg está vacío.

Sugerencias

  • La función sprintf es similar a fprintf, pero fprintf imprime en un archivo o en la ventana de comandos.

  • Los especificadores de formato para las funciones de lectura sscanf y fscanf difieren de los formatos para las funciones de escritura sprintf y fprintf. Las funciones de lectura no admiten un campo de precisión. El campo de anchura especifica un mínimo para escribir y un máximo para leer.

  • Si especifica un operador de formato no válido o un carácter especial, sprintf imprime todo el texto hasta el operador o el carácter no válido y descarta el resto.

    Ejemplo: Si formatSpec es 'value = %z', sprintf imprime 'value =' porque %z no es un operador de formato.

    Ejemplo: Si formatSpec es 'character \x99999 = %s', sprintf imprime 'character' porque \x99999 no es un carácter especial válido.

Referencias

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

[2] ANSI specification X3.159-1989: “Programming Language C,” ANSI, 1430 Broadway, New York, NY 10018.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a