Tengo un gran archivo binario que tiene registros con precisión múltiple como {'Doble', 'Doble', 'Int32', 'Int8', 'Char'}. He usado memmapfile para leer en los datos, pero es muy lento para leer en los datos. ¿Hay alguna manera de leer todo el archivo a través de fread?Lectura de varios archivos binarios de precisión a través de fread en Matlab
5
A
Respuesta
7
Usted puede utilizar la opción 'skip'
de la función FREAD, así como FSEEK para leer los registros de una "columna" en-un-tiempo:
%# type and size in byte of the record fields
recordType = {'double' 'double' 'int32' 'int8' 'char'};
recordLen = [8 8 4 1 1];
R = cell(1,numel(recordType));
%# read column-by-column
fid = fopen('file.bin','rb');
for i=1:numel(recordType)
%# seek to the first field of the first record
fseek(fid, sum(recordLen(1:i-1)), 'bof');
%# % read column with specified format, skipping required number of bytes
R{i} = fread(fid, Inf, ['*' recordType{i}], sum(recordLen)-recordLen(i));
end
fclose(fid);
Este código debería funcionar para cualquier registro de archivo binario en general , solo tiene que especificar los tipos de datos y la longitud del byte de los campos de los registros. El resultado se devolverá en una matriz de celdas que contiene las columnas.
Cuestiones relacionadas
- 1. lectura C archivos binarios
- 2. Lectura y escritura de archivos binarios
- 3. ¿Por qué MATLAB no puede leer correctamente en archivos binarios?
- 4. Varios archivos adjuntos a través de phpmailer
- 5. E/S de archivos binarios
- 6. ¿Combinar varios archivos binarios .NET juntos?
- 7. Envío de varios archivos a través de Bluetooth
- 8. Lectura de archivos .mat en Python
- 9. La lectura de datos desde fsockopen utilizando fgets/fread cuelga
- 10. git rebase fatal en varios archivos binarios 0.5GB
- 11. ¿Cómo usar las funciones fread y fwrite para leer y escribir archivos binarios?
- 12. Lectura de datos binarios sin reinterpret_cast
- 13. Lectura de datos binarios de stdin
- 14. La lectura de datos a partir de archivos de MATLAB en C
- 15. envío de datos binarios a través de POST en android
- 16. Exportación de datos de archivos binarios (imágenes) de SQL a través de un procedimiento almacenado
- 17. Descargar archivos binarios con problemas de archivos
- 18. ¿Fread falla para archivos grandes?
- 19. Transferencia de archivos a través de HTTP
- 20. El envío de datos binarios a través de http
- 21. ¿Lectura de cadenas en Matlab desde excel?
- 22. Boost Puntero compartido: acceso de lectura simultáneo a través de varios subprocesos
- 23. lectura de un archivo CSV en MATLAB
- 24. Cambiando los permisos de archivos de varios archivos a través del terminal Unix
- 25. Python: Búsqueda/lectura de datos binarios
- 26. Precisión aritmética con dobles en Matlab
- 27. Lectura de contenido de archivos en el lado del cliente en javascript en varios navegadores
- 28. API HTML5 de lectura de archivo como texto y binarios
- 29. Varios contadores de tiempo en MATLAB
- 30. Carga de varios archivos en Django a través de un campo de formulario
Impresionante. Gracias por tu ayuda. Funciona perfectamente – shunyo
@shunyo: me alegro de poder ayudar. ¿Ha comparado esto con su solución usando 'memmapfile' en términos de rendimiento? – Amro
Sí, lo hice. Es una mejora de 5 veces en términos de velocidad. Una solución muy útil, la tuya. – shunyo