fprintf
Escribir datos en un archivo de texto
Descripción
fprintf(
aplica fileID
,formatSpec
,A1,...,An
)formatSpec
a todos los elementos de los arreglos A1,...An
en el orden de columna y escribe los datos en un archivo de texto. fprintf
utiliza el esquema de cifrado que se especifica en la llamada a fopen
.
fprintf(
da formato a los datos y muestra el resultado en pantalla.formatSpec
,A1,...,An
)
Ejemplos
Imprimir texto literal y valores de arreglos
Imprima múltiples 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 de punto flotante con una anchura de campo de cuatro dígitos, incluidos dos dígitos después del separador decimal. %8.3f
, en la entrada formatSpec
, especifica que el segundo valor de cada línea de salida es un número de punto flotante con una anchura de campo de ocho dígitos, incluidos tres dígitos después del separador decimal. \n
es un carácter de control que empieza una línea nueva.
Imprimir valores de doble precisión como enteros
Convierta de forma explícita valores de doble precisión 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 un entero con signo. \n
es un carácter de control que empieza una línea nueva.
Escribir datos tabulares en un archivo de texto
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 prevé leer el archivo con Microsoft® Notepad, utilice '\r\n'
en lugar de '\n'
para desplazarse a una línea nueva. 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 de UNIX® y Microsoft Word y WordPad reconocen '\n'
como un indicador de línea nueva.
Muestre 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
Obtener el número de bytes escrito en un archivo
Escriba datos en un archivo y devuelva el número de bytes escrito.
Escriba un arreglo 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);
Muestre 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
Mostrar hipervínculos en la ventana de comandos
Muestre un hipervínculo (el sitio web de 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
fileID
— Identificador de archivo
1
(predeterminado) | 2
| escalar
Identificador de archivo, especificado como una de las siguientes opciones:
Un identificador de archivo obtenido de
fopen
.1
para salida estándar (la pantalla).2
para error estándar.
Tipos de datos: double
formatSpec
— Formato de los campos de salida
operadores de formato
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
, fprintf
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).
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 valor | Conversión | Detalles |
---|---|---|
Entero, con signo |
| Base 10 |
Entero, sin signo |
| Base 10 |
| Base 8 (octal) | |
| Base 16 (hexadecimal), minúsculas | |
| Igual que | |
Número de punto flotante |
| Notación de punto fijo (use un operador de precisión para especificar el número de dígitos después del separador decimal). |
| Notación exponencial, como | |
| Igual que | |
|
| |
|
| |
Caracteres o cadenas |
| Carácter único |
| Vector de caracteres o arreglo de cadena. El tipo de texto de salida es el mismo que el tipo de |
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
, donden
$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 prefijo0
,0x
o0X
.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 para10
y cinco espacios para100
. 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'
imprimepi
como'3.1416'
Para
%g
o%G
Número de dígitos significativos
Ejemplo:'%.4g'
imprimepi
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'
, con9
y6
como anchura de campo y precisión para la salida deexp(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
imprimepi
como400921fb54442d18
%tx
o%tX
%to
%tu
Valor hexadecimal, octal o decimal de precisión simple
Ejemplo:%tx
imprimepi
como40490fdb
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:
devuelvefprintf
('\x5A')'Z'
Carácter cuyo valor numérico Unicode se puede representar mediante el número octal,
N
\N
Ejemplo:
devuelvefprintf
('\132')'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'
conviertepi
a3.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]
aABC
.
A1,...,An
— Arreglos numéricos o de caracteres
escalar | vector | matriz | arreglo multidimensional
Arreglos numéricos o de caracteres, especificados como escalar, vector, matriz o arreglo multidimensional.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
Argumentos de salida
nbytes
— Número de bytes
escalar
Número de bytes que escribe fprintf
, devuelto como escalar. Al escribir en un archivo, el cifrado de caracteres determina nbytes
. 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
yfscanf
difieren de los formatos para las funciones de escriturasprintf
yfprintf
. 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,
fprintf
imprime todo el texto hasta el operador o el carácter no válido y descarta el resto.Ejemplo: Si
formatSpec
es'value = %z'
,fprintf
imprime'value ='
porque%z
no es un operador de formato.Ejemplo: Si
formatSpec
es'character \x99999 = %s'
,fprintf
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
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
El parámetro
formatSpec
debe ser constante.En
formatSpec
, los números hexadecimales deben encontrarse en el rango [0 7F] y los números octales, en el rango [0 177].Si
fileID
tiene un valor constante de1
o2
y no son posibles las llamadas extrínsecas, el generador de código produce una llamada aprintf
en C. Las llamadas extrínsecas no son posibles cuando están deshabilitadas o cuando se llama afprintf
dentro de un bucleparfor
.El comportamiento de
fprintf
en el código generado coincide con el comportamiento del compilador de C en lugar de con el comportamiento de MATLAB en estos casos:El especificador de formato tiene un especificador de formato en C correspondiente, por ejemplo,
%e
o%E
.La llamada a
fprintf
tiene lugar dentro de un bucleparfor
.Las llamadas extrínsecas están deshabilitadas.
No se admiten estas opciones y prestaciones:
El identificador de posición
n$
para reordenar valores de entradaImprimir arreglos
Utilizar subtipos para imprimir un número de punto flotante como su valor octal, decimal o hexadecimal
Al llamar a
fprintf
con el especificador de formato%s
, no se puede situar un carácter nulo en el centro del vector de caracteres de entrada. Para escribir un carácter nulo, utilicefprintf(fid, '%c', char(0))
.Los tipos de argumento de entrada deben coincidir con sus tipos de formato. Por ejemplo, si
n
es un valor doble, la generación de código no permite el código siguiente:str = sprintf('%d',n)
Para la generación de código, asigne
n
primero a un tipo de entero con signo, comoint8
.str = sprintf('%d',int8(n))
Al llamar a
fprintf
con un especificador de formato de número entero, el tipo del argumento de número entero debe ser un tipo que el hardware objetivo puede representar como tipo de C nativo. Por ejemplo, si llama afprintf('%d', int64(n))
, el hardware objetivo debe tener un tipo de C nativo que admita un entero de 64 bits.
Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool
o acelere código con Parallel Computing Toolbox™ ThreadPool
.
Esta función es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en un entorno basado en subprocesos.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
Notas y limitaciones de uso:
Esta función acepta arreglos de GPU, pero no se ejecuta en una GPU.
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Arreglos distribuidos
Realice particiones de arreglos grandes por toda la memoria combinada de su cluster mediante Parallel Computing Toolbox™.
Notas y limitaciones de uso:
Esta función opera sobre arreglos distribuidos, pero se ejecuta en el cliente MATLAB.
Para obtener más información, consulte Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Historial de versiones
Introducido antes de R2006a
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)