Main Content

fread

Leer los datos de un archivo binario

Descripción

ejemplo

A = fread(fileID) lee los datos de un archivo binario abierto a un vector columna A y coloca el puntero del archivo en el marcador de fin de archivo. El archivo binario está indicado por el identificador de archivo, fileID. Use fopen para abrir el archivo y obtenga el valor fileID. Cierre el archivo llamando a fclose(fileID) cuando finalice la lectura.

A = fread(fileID,sizeA) lee los datos del archivo en un arreglo, A, con dimensiones, sizeA, y coloca el puntero del archivo después del último valor leído. fread rellena A siguiendo el orden de las columnas.

ejemplo

A = fread(fileID,precision) interpreta los valores del archivo según la forma y el tamaño descritos por precision.

ejemplo

A = fread(fileID,sizeA,precision) lee los datos del archivo en un arreglo, A, con dimensiones, sizeA, y coloca el puntero del archivo después del último valor leído. fread rellena A siguiendo el orden de las columnas. Los valores se interpretan en el archivo según el formato y el tamaño descritos por precision.

ejemplo

A = fread(___,skip) omite el número de bytes o bits especificado por skip después de leer cada valor en el archivo.

ejemplo

A = fread(___,machinefmt) también especifica el orden de los bytes y bits de lectura en el archivo.

[A,count] = fread(___) además devuelve el número de caracteres que fread lee en A. Puede utilizar esta sintaxis con cualquiera de los argumentos de entrada de las sintaxis anteriores.

Ejemplos

contraer todo

Escriba un vector de nueve elementos en un archivo de muestra, nine.bin.

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

Lea todos los datos del archivo en un vector de la clase double. De forma predeterminada, fread lee un archivo byte a byte, interpreta cada byte como entero de 8 bits sin signo (uint8) y devuelve un arreglo double.

fileID = fopen('nine.bin');
A = fread(fileID)
A = 9×1

     1
     2
     3
     4
     5
     6
     7
     8
     9

fread devuelve un vector columna con un elemento para cada byte del archivo.

Visualice información sobre A.

whos A
  Name      Size            Bytes  Class     Attributes

  A         9x1                72  double              

Cierre el archivo.

fclose(fileID);

Cree un archivo llamado doubledata.bin que contenga nueve valores de doble precisión.

fileID = fopen('doubledata.bin','w');
fwrite(fileID,magic(3),'double');
fclose(fileID);

Abra el archivo, doubledata.bin, y lea los datos del archivo en un arreglo de 3 por 3, A. Especifique que los datos de origen son de la clase double.

fileID = fopen('doubledata.bin');
A = fread(fileID,[3 3],'double')
A = 3×3

     8     1     6
     3     5     7
     4     9     2

Cierre el archivo.

fclose(fileID);

Cree un archivo llamado nine.bin que contenga los valores de 1 a 9. Escriba los datos como valores uint16.

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

Lea los primeros seis valores en un arreglo de 3 por 2. Especifique que los datos de origen son de la clase uint16.

fileID = fopen('nine.bin');
A = fread(fileID,[3,2],'uint16')
A = 3×2

     1     4
     2     5
     3     6

fread devuelve un arreglo rellenado por columnas con los primeros seis valores del archivo, nine.bin.

Vuelva al inicio del archivo.

frewind(fileID)

Lea dos valores a la vez y omita un valor antes de leer los siguientes valores. Especifique este formato con el valor precision, '2*uint16'. Dado que los datos son de la clase uint16, un valor se representa con 2 bytes. Por tanto, especifique el argumento skip como 2.

precision = '2*uint16';
skip = 2;
B = fread(fileID,[2,3],precision,skip)
B = 2×3

     1     4     7
     2     5     8

fread devuelve un arreglo de 2 por 3 rellenado por columnas con los valores de nine.bin.

Cierre el archivo.

fclose(fileID);

Cree un archivo con valores decimales codificados en binario (BCD).

str = ['AB'; 'CD'; 'EF'; 'FA'];

fileID = fopen('bcd.bin','w');
fwrite(fileID,hex2dec(str),'ubit8');
fclose(fileID);

Léalo byte a byte.

fileID = fopen('bcd.bin');
onebyte = fread(fileID,4,'*ubit8');

Muestre los valores BCD.

disp(dec2hex(onebyte))
AB
CD
EF
FA

Vuelva al inicio del archivo con frewind. Si lee 4 bits a la vez en un sistema little-endian, los resultados aparecen en el orden incorrecto.

frewind(fileID)

err = fread(fileID,8,'*ubit4');
disp(dec2hex(err))
B
A
D
C
F
E
A
F

Vuelva al inicio del archivo con frewind. Lea los datos de 4 bits en 4 bits como anteriormente, pero especifique un orden big-endian para mostrar los resultados correctos.

frewind(fileID)

correct = fread(fileID,8,'*ubit4','ieee-be');
disp(dec2hex(correct))
A
B
C
D
E
F
F
A

Cierre el archivo.

fclose(fileID);

Argumentos de entrada

contraer todo

Identificador de archivo de un archivo binario abierto, especificado como entero. Antes de leer un archivo con fread, deberá usar fopen para abrir el archivo y obtener su fileID.

Tipos de datos: double

Dimensiones del arreglo de salida, A, especificadas como Inf, un valor entero o un vector fila de dos elementos.

Forma de la entrada sizeADimensiones del arreglo de salida, A
InfVector columna; cada elemento contiene un valor del archivo.
nVector columna con n elementos.
[m,n]Matriz de m por n, rellenada por orden de columna. n puede ser Inf, pero m no.

Clase y tamaño en bits de los valores que se desea leer, especificados como vector de caracteres o escalar de cadena en uno de los siguientes formatos. Opcionalmente, la entrada especifica la clase de la matriz de salida, A.

Forma de la entrada precisionDescripción
sourceLos valores de entrada son de la clase especificada por source. La matriz de salida A es de la clase double.
Ejemplo: 'int16'
source=>outputLos valores de entrada son de la clase especificada por source. La clase de la matriz de salida, A, está especificada por output.
Ejemplo: 'int8=>char'
*sourceLos valores de entrada y la matriz de salida, A, son de la clase especificada por source. Para precisiones bitn o ubitn, la salida tiene la clase más pequeña que puede contener la entrada.
Ejemplo: '*ubit18'
esto equivale a 'ubit18=>uint32'

N*source o
N*source=>output

Leer N valores antes de omitir el número de bytes especificado por el argumento skip.
Ejemplo: '4*int8'

La siguiente tabla muestra los posibles valores de source y output.

Tipo de valorPrecisiónBits (bytes)

Enteros, sin signo

'uint'

32 (4)

'uint8'

8 (1)

'uint16'

16 (2)

'uint32'

32 (4)

'uint64'

64 (8)

'uchar'

8 (1)

'unsigned char'

8 (1)

'ushort'

16 (2)

'ulong'

32 (4)

'ubitn'

1n64

Enteros, con signo

'int'

32 (4)

'int8'

8 (1)

'int16'

16 (2)

'int32'

32 (4)

'int64'

64 (8)

'integer*1'

8 (1)

'integer*2'

16 (2)

'integer*4'

32 (4)

'integer*8'

64 (8)

'schar'

8 (1)

'signed char'

8 (1)

'short'

16 (2)

'long'

32 (4)

'bitn'

1n64

Números de punto flotante

'single'

32 (4)

'double'

64 (8)

'float'

32 (4)

'float32'

32 (4)

'float64'

64 (8)

'real*4'

32 (4)

'real*8'

64 (8)

Caracteres

'char*1'

8 (1)

'char'

El tipo char de MATLAB® no tiene un tamaño fijo y el número de bytes depende del esquema de codificación asociado al archivo. Establecer la codificación con fopen.

Para la mayoría de valores de source, si fread alcanza el final del archivo antes de leer un valor completo, no devuelve un resultado para el valor final. No obstante, si source es bitn o ubitn, fread devuelve un resultado parcial para el valor final.

Nota

Para mantener los valores NaN e Inf en MATLAB, lea y escriba datos de la clase double o single.

Tipos de datos: char | string

Número de bytes que se desea omitir después de leer cada valor, especificado como escalar. Si especifica precision de bitn o ubitn, especifique skip en bits.

Utilice el argumento skip para leer datos de campos no contiguos en registros de duración fija.

Orden para leer bytes en el archivo, especificado como vector de caracteres o escalar de cadena. Especifique machinefmt como uno de los valores de la tabla que aparece a continuación. Para precisiones bitn y ubitn, machinefmt especifica el orden para leer bits dentro de un byte, pero el orden para leer bytes sigue siendo el orden de bytes de su sistema.

'n' o 'native'

El orden de bytes de su sistema (predeterminado)

'b' o 'ieee-be'

Orden big-endian

'l' o 'ieee-le'

Orden little-endian

's' o 'ieee-be.l64'

Orden big-endian, tipo de datos largo de 64 bits

'a' o 'ieee-le.l64'

Orden little-endian, tipo de datos largo de 64 bits

De forma predeterminada, todas las plataformas compatibles actuales utilizan el orden little-endian para archivos nuevos. Los archivos binarios ya existentes pueden usar tanto el sistema de orden big-endian como little-endian.

Tipos de datos: char | string

Argumentos de salida

contraer todo

Datos de archivo, devueltos como vector columna. Si ha especificado el argumento sizeA, A es una matriz del tamaño especificado. Los datos de A son la clase double a menos que especifique una clase diferente en el argumento precision.

Número de caracteres leídos, devuelto como valor escalar.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo