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.

Exporte datos binarios con e/s de bajo nivel

Funciones de bajo nivel para exportar datos

permiten el control más directo sobre la lectura o escritura de datos en un archivo.Low-level file I/O functions Sin embargo, estas funciones requieren que especifique información más detallada sobre el archivo que la más fácil de usar.high-level functions Para obtener una lista completa de las funciones de alto nivel y los formatos de archivo que admiten, consulte.Formatos de archivo admitidos para importación y exportación

Si las funciones de alto nivel no pueden exportar los datos, utilice una de las siguientes opciones:

Nota

Las funciones de e/s de archivo de bajo nivel se basan en funciones de la biblioteca de C estándar.ANSI® Sin embargo, incluye versiones de las funciones, para leer y escribir datos en una matriz con bucles de control mínimos.MATLAB®vectorized

Escribir datos binarios en un archivo

En este ejemplo se muestra cómo utilizar la función para exportar un flujo de datos binarios a un archivo.fwrite

Cree un archivo con el nombre de los números enteros del 1 al 9.nine.bin Al igual que con cualquiera de las funciones de e/s de bajo nivel, antes de escribir, abrir o crear un archivo con y obtener un identificador de archivo.fopen

fileID = fopen('nine.bin','w'); fwrite(fileID, [1:9]);

De forma predeterminada, escribe valores de una matriz en orden de columnas como enteros de 8 bits sin signo ().fwriteuint8

Cuando termine de procesar un archivo, ciérrelo con.fclose

fclose(fileID);

Cree un archivo con valores de precisión doble. Debe especificar la precisión de los valores si los valores de la matriz no son enteros de 8 bits sin signo.

mydata = [pi 42 1/3];  fileID = fopen('double.bin','w'); fwrite(fileID,mydata,'double'); fclose(fileID);

Sobrescribir o anexar a un archivo binario existente

En este ejemplo se muestra cómo sobrescribir una parte de un archivo binario existente y anexar valores al archivo.

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

  • para leer'r'

  • para escribir, descartando cualquier contenido existente del archivo'w'

  • para anexar al final de un archivo existente'a'

Para abrir un archivo tanto para leer como para escribir o anexar, adjunte un signo más al permiso, como o.'w+''a+' Si abre un archivo para lectura y escritura, debe llamar o entre operaciones de lectura y escritura.fseekfrewind

Sobrescribir una parte de un archivo existente

Cree un archivo con el nombre, especificando el permiso para escribir y leer.magic4.bin

fileID = fopen('magic4.bin','w+'); fwrite(fileID,magic(4));

La matriz original de Magic (4) es:

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

El archivo contiene 16 bytes, 1 para cada valor de la matriz.

Reemplace los valores de la segunda columna de la matriz por el vector,.[44 44 44 44] Para ello, primero busque el cuarto byte desde el principio del archivo usando.fseek

fseek(fileID,4,'bof');

Escribe el vector usando.[44 44 44 44]fwrite

fwrite(fileID,[44 44 44 44]);

Lea los resultados del archivo en una matriz de 4 por 4.

frewind(fileID); newdata = fread(fileID,[4,4])
newdata = 4×4

    16    44     3    13
     5    44    10     8
     9    44     6    12
     4    44    15     1

Cierre el archivo.

fclose(fileID);

Anexar datos binarios a archivo existente

Anexe los valores a.[55 55 55 55]magic4.bin Primero. abrir el archivo con permiso para anexar y leer.

fileID = fopen('magic4.bin','a+');

Escribir valores al final del archivo.

fwrite(fileID,[55 55 55 55]);

Lea los resultados del archivo en una matriz de 4 por 5.

frewind(fileID); appended = fread(fileID, [4,5])
appended = 4×5

    16    44     3    13    55
     5    44    10     8    55
     9    44     6    12    55
     4    44    15     1    55

Cierre el archivo.

fclose(fileID);

Cree un archivo para utilizarlo en un sistema diferente

Los diferentes sistemas operativos almacenan información de forma diferente en el nivel de byte o bit:

  • los sistemas almacenan los bytes comenzando con la dirección más grande en la memoria (es decir, empiezan con el extremo grande).Big-endian

  • los sistemas almacenan los bytes comenzando por la dirección más pequeña (el extremo pequeño).Little-endian

sistemas utilizan el orden de bytes Little-endian, y los sistemas utilizan el orden de bytes big-endian.Windows®UNIX®

Para crear un archivo para utilizarlo en un sistema endian opuesto, especifique el orden de bytes para el sistema de destino. Puede especificar el orden en la llamada para abrir el archivo o en la llamada para escribir el archivo.

Por ejemplo, para crear un archivo denominado en un sistema big-endian para utilizarlo en un sistema Little-endian, utilice uno (o ambos) de los siguientes comandos:myfile.bin

  • Abra el archivo con

    fid = fopen('myfile.bin', 'w', 'l')
  • Escriba el archivo con

    fwrite(fid, mydata, precision, 'l')

donde indica orden Little-Endian.'l'

Si no está seguro de qué orden de bytes utiliza su sistema, llame a la función:computer

[cinfo, maxsize, ordering] = computer
El devuelto ordering es para sistemas Little-endian, o para sistemas big-endian.'L''B'

Abrir archivos con diferentes codificaciones de caracteres

admiten los caracteres requeridos para alfabetos concretos, como los de idiomas japoneses o europeos.Encoding schemes Los esquemas de codificación comunes incluyen US-ASCII o UTF-8.

El esquema de codificación determina el número de bytes necesarios para leer o escribir valores.char Por ejemplo, los caracteres US-ASCII utilizan siempre 1 byte, pero los caracteres UTF-8 utilizan hasta 4 bytes. procesa automáticamente el número necesario de bytes para cada valor en función del esquema de codificación especificado.MATLABchar Sin embargo, si especifica una precisión, procesa cada byte como, independientemente de la codificación especificada.ucharMATLABuint8

Si no especifica un esquema de codificación, abre los archivos para su procesamiento utilizando la codificación predeterminada para el sistema.fopen Para determinar el valor predeterminado, abra un archivo y vuelva a llamar con la sintaxis:fopen

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

Si especifica un esquema de codificación al abrir un archivo, las siguientes funciones aplican ese esquema:,,,, y.fscanffprintffgetlfgetsfreadfwrite

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

Escriba y lea números complejos

Este ejemplo muestra cómo escribir y leer números complejos en archivos binarios.

Los valores de precisión disponibles para no admiten explícitamente números complejos.fwrite Para almacenar números complejos en un archivo, separe los componentes reales e imaginarios y escríbelos por separado al archivo. Hay dos maneras de hacer esto:

  • Escriba todos los componentes reales seguidos de todos los componentes imaginarios

  • Interdeje los componentes

Utilice el enfoque que le permite leer los datos en la aplicación de destino.

Separe los componentes reales e imaginarios

Cree una matriz que contenga valores complejos.

nrows = 5; ncols = 5; z = complex(rand(nrows, ncols), rand(nrows, ncols))
z = 5×5 complex

   0.8147 + 0.7577i   0.0975 + 0.7060i   0.1576 + 0.8235i   0.1419 + 0.4387i   0.6557 + 0.4898i
   0.9058 + 0.7431i   0.2785 + 0.0318i   0.9706 + 0.6948i   0.4218 + 0.3816i   0.0357 + 0.4456i
   0.1270 + 0.3922i   0.5469 + 0.2769i   0.9572 + 0.3171i   0.9157 + 0.7655i   0.8491 + 0.6463i
   0.9134 + 0.6555i   0.9575 + 0.0462i   0.4854 + 0.9502i   0.7922 + 0.7952i   0.9340 + 0.7094i
   0.6324 + 0.1712i   0.9649 + 0.0971i   0.8003 + 0.0344i   0.9595 + 0.1869i   0.6787 + 0.7547i

Separe los valores complejos en componentes reales e imaginarios.

z_real = real(z); z_imag = imag(z);

Escribir todos los componentes reales por componentes imaginariosFollowed

Escriba todos los componentes reales, seguidos de todos los componentes imaginarios, a un archivo llamado.z_realz_imagcomplex_adj.bin

adjacent = [z_real z_imag];  fileID = fopen('complex_adj.bin', 'w'); fwrite(fileID,adjacent,'double'); fclose(fileID);

Lea los valores del archivo utilizando.fread

fileID = fopen('complex_adj.bin'); same_real = fread(fileID, [nrows, ncols], 'double'); same_imag = fread(fileID, [nrows, ncols], 'double'); fclose(fileID);  same_z = complex(same_real, same_imag);

Interleave componentes reales e imaginarios

Un enfoque alternativo es intercalan los componentes reales e imaginarios para cada valor. escribe valores en orden de columnas, así que construya una matriz que combine las partes reales e imaginarias alternando las filas.fwrite

En primer lugar, preasigne la matriz intercalada.

interleaved = zeros(nrows*2, ncols);

Alternar datos reales e imaginarios.

newrow = 1; for row = 1:nrows     interleaved(newrow,:) = z_real(row,:);     interleaved(newrow + 1,:) = z_imag(row,:);     newrow = newrow + 2; end

Escriba los valores intercalados en un archivo denominado.complex_int.bin

fileID = fopen('complex_int.bin','w'); fwrite(fileID, interleaved, 'double'); fclose(fileID);

Abra el archivo para leer y leer los valores reales del archivo. La cuarta entrada para indica a la función que omita el número especificado de bytes después de leer cada valor.fread

fileID = fopen('complex_int.bin'); same_real = fread(fileID, [nrows, ncols], 'double', 8);

Vuelva al primer valor imaginario del archivo. A continuación, Lea todos los datos imaginarios.

fseek(fileID, 8, 'bof'); same_imag = fread(fileID, [nrows, ncols], 'double', 8); fclose(fileID);  same_z = complex(same_real, same_imag);

Consulte también

| | |

Temas relacionados