fread
Leer los datos de un archivo binario
Sintaxis
Descripción
lee los datos de un archivo binario abierto a un vector columna A
= fread(fileID
)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.
lee los datos del archivo en un arreglo, A
= fread(fileID
,sizeA
,precision
)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
.
también especifica el orden de los bytes y bits de lectura en el archivo.A
= fread(___,machinefmt
)
Ejemplos
Leer todo un archivo de datos uint8
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);
Leer todo un archivo de datos de doble precisión
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);
Eliminar filas o columnas seleccionadas de un archivo
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);
Leer dígitos de valores decimales codificados en binario
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
fileID
— Identificador de archivo
valor entero
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
sizeA
— Dimensiones del arreglo de salida
Inf
(predeterminado) | valor entero | vector fila de dos elementos
Dimensiones del arreglo de salida, A
, especificadas como Inf
, un valor entero o un vector fila de dos elementos.
Forma de la entrada sizeA | Dimensiones del arreglo de salida, A |
---|---|
Inf | Vector columna; cada elemento contiene un valor del archivo. |
| Vector columna con n elementos. |
| Matriz de m por n , rellenada por orden de columna. n puede ser Inf , pero m no. |
precision
— Clase y tamaño de los valores que se desea leer
'uint8=>double'
(predeterminado) | vector de caracteres o escalar de cadena
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 precision | Descripción |
---|---|
source | Los valores de entrada son de la clase especificada por source . La matriz de salida A es de la clase double . Ejemplo: 'int16' |
source =>output | Los 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' |
* | Los valores de entrada y la matriz de salida, A , son de la clase especificada por source . Para precisiones bit o ubit , la salida tiene la clase más pequeña que puede contener la entrada.Ejemplo: '*ubit18' esto equivale a 'ubit18=>uint32' |
| Leer |
La siguiente tabla muestra los posibles valores de source
y output
.
Tipo de valor | Precisión | Bits (bytes) |
---|---|---|
Enteros, sin signo |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
Enteros, con signo |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
Números de punto flotante |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
Caracteres |
|
|
| El tipo |
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 bit
o n
ubit
, n
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
skip
— Número de bytes que se desea omitir
0 (predeterminado) | escalar
Número de bytes que se desea omitir después de leer cada valor, especificado como escalar. Si especifica precision
de bit
o n
ubit
, especifique n
skip
en bits.
Utilice el argumento skip
para leer datos de campos no contiguos en registros de duración fija.
machinefmt
— Orden para leer bytes
'n'
(predeterminado) | 'b'
| 'l'
| 's'
| 'a'
| ...
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 bit
y n
ubit
, n
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.
| El orden de bytes de su sistema (predeterminado) |
| Orden big-endian |
| Orden little-endian |
| Orden big-endian, tipo de datos largo de 64 bits |
| 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
A
— Datos de archivo
vector columna | matriz
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
.
count
— Número de caracteres leídos
escalar
Número de caracteres leídos, devuelto como valor escalar.
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
El argumento de entrada
precision
debe ser constante.Las clases
source
youtput
queprecision
especifica no pueden tener estos valores:'long'
,'ulong'
,'unsigned long'
,'bit
on
''ubit
.n
'No puede utilizar la entrada
machinefmt
.Si la clase
source
uoutput
queprecision
especifica es un tipo C, por ejemplo,int
, el tamaño objetivo y de producción para ese tipo debe:Coincidir.
Asignarse directamente a un tipo de MATLAB.
El tipo
source
queprecision
especifica debe asignarse directamente a un tipo C en el hardware objetivo.Si la llamada a
fread
lee el archivo completo, todos los datos deben caber en el arreglo más grande disponible para generar código.Si
sizeA
no es constante o contiene un elemento no finito, se requiere asignación de memoria dinámica.El generador de código de la función
fread
trata el valorchar
desource
uoutput
como un entero de8
bits con signo. Use solo valores entre0
y127
.El código generado no informa de errores de lectura de archivo. Por tanto, debe escribir su propio mensaje de error al leer el archivo en su código de MATLAB. En el código de tratamiento de errores, considere comprobar que el número de bytes leído coincide con el número de bytes solicitado. Por ejemplo:
... N = 100; [vals, numRead] = fread(fid, N, '*double'); if numRead ~= N % fewer elements read than expected end ...
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.
Historial de versiones
Introducido antes de R2006aR2022b: Uso de la función en entornos basados en subprocesos
Esta función es compatible con entornos basados en subprocesos.
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)