Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

fprintf

Escribir datos en un archivo de texto

Descripción

ejemplo

fprintf(fileID,formatSpec,A1,...,An) aplica formatSpec a todos los elementos de arrays A1,...An en orden de columna y escribe los datos en un archivo de texto. fprintf utiliza el esquema de codificación especificado en la llamada a fopen.

ejemplo

fprintf(formatSpec,A1,...,An) da formato a los datos y muestra los resultados en la pantalla.

ejemplo

nbytes = fprintf(___) devuelve el número de bytes que escribe fprintf utilizando cualquiera de los argumentos de entrada de las sintaxis anteriores.

Ejemplos

contraer todo

Imprima varios valores numéricos y texto literal en la pantalla.

A1 = [9.9, 9900];
A2 = [8.8,  7.7 ; ...
      8800, 7700];
formatSpec = 'X is %4.2f meters or %8.3f mm\n';
fprintf(formatSpec,A1,A2)
X is 9.90 meters or 9900.000 mm
X is 8.80 meters or 8800.000 mm
X is 7.70 meters or 7700.000 mm

%4.2f en la entrada formatSpec especifica que el primer valor de cada línea de salida es un número en punto flotante con un ancho de campo de cuatro dígitos, incluidos dos dígitos después del punto decimal. %8.3f en la entrada formatSpec especifica que el segundo valor de cada línea de salida es un número en punto flotante con un ancho de campo de ocho dígitos, incluidos tres dígitos después del punto decimal. \n es un carácter de control que inicia una nueva línea.

Convierta explícitamente valores de precisión doble con fracciones a valores enteros.

a = [1.02 3.04 5.06];
fprintf('%d\n',round(a));
1
3
5

%d en la entrada formatSpec imprime cada valor del vector, round(a), como entero con signo. \n es un carácter de control que inicia una nueva línea.

Escriba una tabla corta de la función exponencial en un archivo de texto llamado exp.txt.

x = 0:.1:1;
A = [x; exp(x)];

fileID = fopen('exp.txt','w');
fprintf(fileID,'%6s %12s\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\n',A);
fclose(fileID);

La primera llamada a fprintf imprime el texto de encabezado x y exp(x), y la segunda llamada imprime los valores de la variable A.

Si planea leer el archivo con el Bloc de notas de Microsoft®, utilice '\r\n' en lugar de '\n' para pasar a una nueva línea. Por ejemplo, reemplace las llamadas a fprintf por lo siguiente:

fprintf(fileID,'%6s %12s\r\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\r\n',A);

Las funciones de importación de MATLAB®, todas las aplicaciones UNIX® y Microsoft Word y WordPad reconocen '\n' como indicador de nueva línea.

Vea el contenido del archivo con el comando type.

type exp.txt
     x       exp(x)
  0.00   1.00000000
  0.10   1.10517092
  0.20   1.22140276
  0.30   1.34985881
  0.40   1.49182470
  0.50   1.64872127
  0.60   1.82211880
  0.70   2.01375271
  0.80   2.22554093
  0.90   2.45960311
  1.00   2.71828183

Escriba datos en un archivo y devuelva el número de bytes escritos.

Escriba un array de datos, A, en un archivo y obtenga el número de bytes que escribe fprintf.

A = magic(4);

fileID = fopen('myfile.txt','w');
nbytes = fprintf(fileID,'%5d %5d %5d %5d\n',A)
nbytes = 96

La función fprintf escribió 96 bytes en el archivo.

Cierre el archivo.

fclose(fileID);

Vea el contenido del archivo con el comando type.

type('myfile.txt')
   16     5     9     4
    2    11     7    14
    3    10     6    15
   13     8    12     1

Muestre un hipervínculo (El sitio web de The MathWorks) en la pantalla.

url = 'https://www.mathworks.com';
sitename = 'The MathWorks Web Site';

fprintf('<a href = "%s">%s</a>\n',url,sitename)

%s en la entrada formatSpec indica que los valores de las variables url y sitename deben imprimirse como texto.

Argumentos de entrada

contraer todo

Identificador de archivo, especificado como uno de los siguientes:

  • Un identificador de archivo obtenido de fopen.

  • 1 para la salida estándar (la pantalla).

  • 2 para el error estándar.

Tipos de datos: double

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

formatSpec puede ser un vector de caracteres entre comillas simples o, a partir de la versión R2016b, un escalar de cadena.

Operador de formato

Un operador de formato comienza por un signo de porcentaje, %, y termina por un carácter de conversión. Se requiere el carácter de conversión. Opcionalmente, puede especificar operadores de identificador, indicadores, ancho de campo, precisión y de subtipo entre % y el carácter de conversión. (Los espacios no son válidos entre los operadores y se muestran aquí solo con fines de legibilidad).

Carácter de conversión

Esta tabla muestra los caracteres de conversión para formatear datos numéricos y 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), letras en minúscula af

%X

Igual que %x, letras en mayúscula AF

Número en punto flotante

%f

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

%e

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

%E

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

%g

El más compacto entre %e y %f, sin ceros finales (utilice un operador de precisión para especificar el número de dígitos significativos.)

%G

El más compacto entre %E y %f, sin ceros finales (utilice 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 array de cadenas. El tipo del texto de salida es el mismo que el de formatSpec.

Operadores opcionales

Los operadores opcionales de identificador, indicadores, ancho de campo, precisión y subtipo definen aún más el formato del texto de salida.

  • Identificador

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

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

    Nota: Si un argumento de entrada es un array, no puede utilizar identificadores para especificar elementos de array concretos a partir de ese argumento de entrada.

  • Indicadores

    '–'

    Justificación a la izquierda.
    Ejemplo: %-5.2f
    Ejemplo: %-10s

    '+'

    Imprimir siempre un carácter de signo (+ o –) para cualquier valor numérico.
    Ejemplo: %+5.2f
    Justificación a la derecha del texto.
    Ejemplo: %+10s

    ' '

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

    '0'

    Rellenar hasta el ancho del campo con ceros antes del valor.
    Ejemplo: %05.2f

    '#'

    Modificar las conversiones numéricas seleccionadas:

    • Para %o, %x o %X, usar el prefijo 0, 0x o 0X.

    • Para %f, %e o %E, usar el punto decimal aunque la precisión sea 0.

    • Para %g o %G, no eliminar los ceros finales ni el punto decimal.

    Ejemplo: %#5.0f

  • Ancho de campo

    Número mínimo de caracteres que se imprimirán. El operador de ancho de campo puede ser un número o un asterisco (*) para hacer referencia a un argumento de entrada.

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

    La función se rellena hasta el ancho del campo con espacios antes del valor a menos que los indicadores especifiquen lo contrario.

  • Precisión

    Para %f, %e o %E

    Número de dígitos a la derecha del punto 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 hacer referencia a un argumento.

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

    Nota

    Si especifica un operador de precisión para valores en punto flotante que exceda la precisión del tipo de datos numéricos de entrada, los resultados podrían no hacer coincidir los valores de entrada con la precisión especificada. El resultado depende del hardware y del sistema operativo de su ordenador.

  • Subtipos

    Puede utilizar un operador de subtipo para imprimir un valor en punto flotante como 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 en punto flotante

    %bx o %bX
    %bo
    %bu

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

    %tx o %tX
    %to
    %tu

    Hexadecimal de precisión simple, octal o valor decimal
    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 signo 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. En esta tabla se 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 los operadores de formato

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

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

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

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

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

Tipos de datos: char | string

Arrays numéricos o de caracteres, especificados como escalares, vectores, matrices o arrays multidimensionales.

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

Argumentos de salida

contraer todo

Número de bytes que escribe fprintf, devueltos como escalar. Al escribir en un archivo, nbytes está determinado por la codificación de caracteres. Al imprimir datos en la pantalla, nbytes es el número de caracteres que se muestra en la pantalla.

Sugerencias

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

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

Introducido antes de R2006a