Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Exportar a archivos de datos de texto con E/S de bajo nivel

Escribir en archivos de texto mediante fprintf

Este ejemplo muestra cómo crear archivos de texto, incluidas combinaciones de datos numéricos y de caracteres y archivos no rectangulares, mediante la función fprintf de bajo nivel.

fprintf se basa en su función homónima de la biblioteca de C estándar de ANSI®. Sin embargo, MATLAB® utiliza una versión vectorizada de fprintf que escribe datos de un arreglo usando una mínima cantidad de bucles de control.

Abrir el archivo

Cree una matriz de muestra y con dos filas.

x = 0:0.1:1;
y = [x; exp(x)];

Abra un archivo de escritura con fopen y obtenga un identificador de archivo, fileID. De forma predeterminada, fopen abre un archivo con acceso de solo lectura, de modo que debe especificar el permiso para escribir o añadir algo, como 'w' o 'a'.

fileID = fopen('exptable.txt','w');

Escribir en el archivo

Escriba un título, seguido de una línea en blanco, mediante la función fprintf. Para moverse a una nueva línea del archivo, use '\n'.

fprintf(fileID, 'Exponential Function\n\n');

Nota: Algunos editores de texto de Windows®, incluido Microsoft® Notepad, requieren una secuencia de caracteres de nueva línea de '\r\n' en lugar de '\n'. Sin embargo, '\n' es suficiente para Microsoft Word o WordPad.

Escriba los valores de y en el orden de la columna para que aparezcan dos valores en cada fila del archivo. fprintf convierte los números o caracteres de las entradas del arreglo a texto de acuerdo con las especificaciones. Especifique '%f' para imprimir números de punto flotante.

fprintf(fileID,'%f %f\n',y);

Otros especificadores de conversión frecuentes son '%d' para números enteros o '%s' para caracteres. fprintf vuelve a aplicar la información de conversión para desplazarse por todos los valores de los arreglos de entrada en el orden de la columna.

Cierre el archivo mediante fclose cuando finalice la escritura.

fclose(fileID);

Visualice el contenido del archivo mediante la función type.

type exptable.txt
Exponential Function

0.000000 1.000000
0.100000 1.105171
0.200000 1.221403
0.300000 1.349859
0.400000 1.491825
0.500000 1.648721
0.600000 1.822119
0.700000 2.013753
0.800000 2.225541
0.900000 2.459603
1.000000 2.718282

Otras opciones de formato

De forma opcional, incluya información adicional en la llamada a fprintf para describir el ancho de campo, la precisión o el orden de los valores de salida. Por ejemplo, especifique el ancho de campo y el número de dígitos situados a la derecha de la coma decimal en la tabla exponencial.

fileID = fopen('exptable_new.txt', 'w');

fprintf(fileID,'Exponential Function\n\n');
fprintf(fileID,'%6.2f %12.8f\n', y);

fclose(fileID);

Visualice el contenido del archivo.

type exptable_new.txt
Exponential Function

  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

Añadir valores a archivos de texto existentes o sobrescribirlos

Este ejemplo muestra cómo añadir valores a un archivo de texto existente, reescribir todo el archivo y sobrescribir solo una parte del archivo.

De forma predeterminada, fopen abre los archivos con acceso de lectura. Para cambiar el tipo de acceso a los archivos, utilice el especificador de permiso en la llamada a fopen. Los posibles especificadores de permiso son:

  • 'r' para lectura

  • 'w' para escritura, descartando el contenido existente del archivo

  • 'a' para añadir valores al final de un archivo existente

Para abrir un archivo tanto para lectura y escritura como para añadir valores, añada un signo más al permiso, como 'w+' o 'a+'. Si abre un archivo tanto para lectura como para escritura, debe llamar a fseek o frewind entre las operaciones de lectura y escritura.

Añadir valores a un archivo de texto existente

Cree un archivo denominado changing.txt.

fileID = fopen('changing.txt','w');
fmt = '%5d %5d %5d %5d\n';
fprintf(fileID,fmt, magic(4));
fclose(fileID);

El contenido actual de changing.txt es:

16 5 9 4

2 11 7 14

3 10 6 15

13 8 12 1

Abra el archivo con permiso para añadir valores.

fileID = fopen('changing.txt','a');

Escriba los valores [55 55 55 55] al final del archivo:

fprintf(fileID,fmt,[55 55 55 55]);

Cierre el archivo.

fclose(fileID);

Visualice el contenido del archivo mediante la función type.

type changing.txt
   16     5     9     4
    2    11     7    14
    3    10     6    15
   13     8    12     1
   55    55    55    55

Sobrescribir todo el archivo de texto

Un archivo de texto consta de un conjunto contiguo de caracteres, incluidos caracteres de nueva línea. Para reemplazar una línea del archivo con un número diferente de caracteres, debe reescribir la línea que desee cambiar y todas las líneas posteriores del archivo.

Reemplace la primera línea de changing.txt con texto más largo y descriptivo. Dado que el cambio se aplica a la primera línea, reescriba todo el archivo.

replaceLine = 1;
numLines = 5;
newText = 'This file originally contained a magic square';

fileID = fopen('changing.txt','r');
mydata = cell(1, numLines);
for k = 1:numLines
   mydata{k} = fgetl(fileID);
end
fclose(fileID);

mydata{replaceLine} = newText;

fileID = fopen('changing.txt','w');
fprintf(fileID,'%s\n',mydata{:});
fclose(fileID);

Visualice el contenido del archivo.

type changing.txt
This file originally contained a magic square
    2    11     7    14
    3    10     6    15
   13     8    12     1
   55    55    55    55

Sobrescribir parte del archivo de texto

Reemplace la tercera línea de changing.txt con [33 33 33 33]. Si desea reemplazar una parte de un archivo de texto con exactamente el mismo número de caracteres, no es necesario que reescriba ninguna otra línea del archivo.

replaceLine = 3;
myformat = '%5d %5d %5d %5d\n';
newData = [33 33 33 33];

Mueva el marcador de posición del archivo a la línea correcta.

fileID = fopen('changing.txt','r+');
for k=1:(replaceLine-1);
   fgetl(fileID);
end

Llame a fseek entre las operaciones de lectura y escritura.

fseek(fileID,0,'cof');

fprintf(fileID, myformat, newData);
fclose(fileID);

Visualice el contenido del archivo.

type changing.txt
This file originally contained a magic square
    2    11     7    14
   33    33    33    33
   13     8    12     1
   55    55    55    55

Abrir archivos con cifrados de caracteres diferentes

Los esquemas de cifrado admiten los caracteres necesarios para alfabetos concretos, como los de las lenguas europeas o el japonés. Los esquemas de cifrado más frecuentes son US-ASCII o UTF-8.

Si no especifica un esquema de cifrado al abrir un archivo para lectura, fopen utiliza la detección automática del conjunto de caracteres para determinar la codificación. Si no especifica un esquema de cifrado al abrir un archivo para escritura, fopen utiliza de forma predeterminada UTF-8 para permitir la interoperabilidad entre todas las plataformas y configuraciones locales sin pérdida de datos ni daños.

Para determinar el valor predeterminado, abra un archivo y llame a fopen de nuevo con la sintaxis:

[filename, permission, machineformat, encoding] = fopen(fid);

Si especifica un esquema de cifrado al abrir un archivo, las siguientes funciones aplican dicho esquema: fscanf, fprintf, fgetl, fgets, fread y fwrite.

Para obtener una lista completa de los esquemas de cifrado admitidos y la sintaxis para especificar el cifrado, consulte la página de referencia de fopen.

Consulte también

| |

Temas relacionados