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.

Importe datos binarios con e/s de bajo nivel

Funciones de bajo nivel para importar 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 importar 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

La lectura de datos binarios en un archivo

Al igual que con cualquiera de las funciones de e/s de bajo nivel, antes de importar, abra el archivo y obtenga un identificador de archivo.fopen Cuando termine de procesar un archivo, ciérrelo confclose(fileID).

De forma predeterminada, lee un archivo de 1 byte a la vez e interpreta cada byte como un entero de 8 bits sin signo (). crea un vector de columna, con un elemento para cada byte del archivo.freaduint8fread Los valores del vector de columna son de clase.double

Por ejemplo, considere el archivo, creado de la siguiente manera:nine.bin

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

Para leer todos los datos del archivo en un vector de columna de 9 por 1 de clase:double

fid = fopen('nine.bin'); col9 = fread(fid); fclose(fid);

Cambiar las dimensiones de la matriz

De forma predeterminada, Lee todos los valores del archivo en un vector de columna.fread Sin embargo, puede especificar el número de valores que desea leer o describir una matriz de salida bidimensional.

Por ejemplo, para leer, descrito en el ejemplo anterior:nine.bin

fid = fopen('nine.bin');  % Read only the first six values col6 = fread(fid, 6);  % Return to the beginning of the file frewind(fid);  % Read first four values into a 2-by-2 matrix frewind(fid); two_dim4 = fread(fid, [2, 2]);  % Read into a matrix with 3 rows and % unspecified number of columns frewind(fid); two_dim9 = fread(fid, [3, inf]);  % Close the file fclose(fid);

Describir los valores de entrada

Si los valores del archivo no son enteros sin signo de 8 bits, especifique el tamaño de los valores.

Por ejemplo, considere el archivo, creado con valores de precisión doble de la siguiente manera:fpoint.bin

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

Para leer el archivo:

fid = fopen('fpoint.bin');  % read, and transpose so samevals = myvals samevals = fread(fid, 'double')';  fclose(fid);

Para obtener una lista completa de las descripciones de precisión, consulte la página de referencia de función.fread

Ahorro de memoria

De forma predeterminada, crea una matriz de clase.freaddouble El almacenamiento de valores de precisión doble en una matriz requiere más memoria que el almacenamiento de caracteres, enteros o valores de precisión simple.

Para reducir la cantidad de memoria necesaria para almacenar los datos, especifique la clase de la matriz mediante uno de los métodos siguientes:

  • Haga coincidir la clase de los valores de entrada con un asterisco ().'*' Por ejemplo, para leer valores de precisión simple en una matriz de clase, utilice el comando:single

    mydata = fread(fid,'*single')
  • Asigne los valores de entrada a una nueva clase con el símbolo.'=>' Por ejemplo, para leer valores en una matriz, utilice el comando:uint8uint16

    mydata = fread(fid,'uint8=>uint16')

Para obtener una lista completa de las descripciones de precisión, consulte la página de referencia de función.fread

Leer porciones de un archivo

las funciones de bajo nivel incluyen varias opciones para leer porciones de datos binarios en un archivo:MATLAB

Las pruebas de fin de archivo

Al abrir un archivo, crea un puntero para indicar la posición actual dentro del archivo.MATLAB

Nota

Abrir un archivo vacío mueve el indicador de posición del archivo al final del archivo.not Las operaciones de lectura, y las funciones, mueven el indicador de posición del archivo.fseekfrewind

Utilice la función para comprobar si ha llegado al final de un archivo. Devuelve un valor de cuando el puntero de archivo está al final del archivo.feoffeof1 De lo contrario, devuelve.0

Por ejemplo, lea un archivo grande en partes:

filename = 'largedata.dat';  % hypothetical file segsize = 10000;  fid = fopen(filename);  while ~feof(fid)     currData = fread(fid, segsize);     if ~isempty(currData)         disp('Current Data:');         disp(currData);     end end      fclose(fid);

Moviéndose dentro de un archivo

Para leer o escribir partes de datos seleccionadas, mueva el indicador de posición del archivo a cualquier ubicación del archivo. Por ejemplo, llame con la sintaxisfseek

fseek(fid,offset,origin);

Dónde:

  • fid es el identificador de archivo Obtenido de.fopen

  • offset es un valor de desfase positivo o negativo, especificado en bytes.

  • origin Especifica la ubicación desde la que se calculará la posición:

    'bof'

    El inicio del archivo

    'cof'

    Posición actual en el archivo

    'eof'

    Fin del archivo

Alternativamente, para moverse fácilmente al principio de un archivo:

frewind(fid);

Utilíciese para encontrar la posición actual dentro de un archivo determinado. Devuelve el número de bytes desde el principio del archivo.ftellftell

Por ejemplo, cree un archivo:five.bin

A = 1:5; fid = fopen('five.bin','w'); fwrite(fid, A,'short'); fclose(fid);

Dado que la llamada para especificar el formato, cada elemento de usa dos bytes de almacenamiento en.fwriteshortAfive.bin

Volver a abrir para leer:five.bin

fid = fopen('five.bin','r');

Mueva el indicador de posición del archivo hacia delante 6 bytes desde el principio del archivo:

status = fseek(fid,6,'bof'); 

Lea el siguiente elemento:

four = fread(fid,1,'short');

El acto de lectura avanza el indicador de posición del archivo. Para determinar el indicador de posición actual del archivo, llame aftell:

position = ftell(fid)  position =       8 

Para mover el indicador de posición del archivo hacia atrás 4 bytes, vuelva a llamar:fseek

status = fseek(fid,-4,'cof');

Lea el siguiente valor:

three = fread(fid,1,'short');

Leer archivos creados en otros sistemas

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 leer un archivo creado en un sistema endian opuesto, especifique el orden de bytes utilizado para crear el archivo. Puede especificar el orden en la llamada para abrir el archivo o en la llamada para leer el archivo.

Por ejemplo, considere un archivo con valores de precisión doble denominados, creados en un sistema Little-Endian.little.bin Para leer este archivo en un sistema big-endian, utilice uno (o ambos) de los siguientes comandos:

  • Abra el archivo con

    fid = fopen('little.bin', 'r', 'l')
  • Lea el archivo con

    mydata = fread(fid, 'double', '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