Ho un enorme file binario che ha record con precisione multipla come {'Double', 'Double', 'Int32', 'Int8', 'Char'}. Ho usato memmapfile per leggere nei dati, ma è dolorosamente lento a leggere nei dati. C'è un modo per leggere l'intero file attraverso fread?Lettura di file binari di precisione multipli attraverso l'apertura in Matlab
5
A
risposta
7
È possibile utilizzare l'opzione 'skip'
della funzione FREAD nonché FSEEK di leggere i record uno "colonna" at-a-tempo:
%# 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);
Questo codice dovrebbe funzionare per tutti i record file binario in generale , devi solo specificare i tipi di dati e la lunghezza in byte dei campi dei record. Il risultato verrà restituito in una matrice di celle contenente le colonne.
Problemi correlati
- 1. Lettura/Scrittura di file binari
- 2. Prestazioni di lettura file binari .NET
- 3. Lettura/scrittura su file binari in C
- 4. MATLAB - Elimina elementi di file binari senza caricare l'intero file
- 5. lettura dei dati da file di MATLAB in C
- 6. Lettura di file MatLab in python w/scipy
- 7. C la lettura dei file binari
- 8. Python: ricerca/lettura di dati binari
- 9. MATLAB: lettura di entrambi i byte di un file binario a 16 bit senza segno
- 10. Lettura dei dati di intestazione nei binari
- 11. Lettura colonna specifica da file CSV in MATLAB
- 12. Lettura e tempo da file CSV in MATLAB
- 13. Matlab (2008a-32bit) singolo bug precisione
- 14. File di registro multipli in symfony
- 15. Scrittura di file binari in C++
- 16. file tar multipli (file di origine) nel file rpm.spec
- 17. dimensioni del blocco preferite durante la lettura/scrittura di file binari di grandi dimensioni
- 18. Android download problemi di file binari
- 19. Lettura di file MP3
- 20. Lettura di file .DXF
- 21. Lettura di file MIDI
- 22. Lettura/scrittura di dati binari su SD utilizzando Arduino
- 23. Qual è il modo corretto di servire i file mp4 attraverso i binari su un Ipad?
- 24. HTML5 upload di file multipli: caricare uno per uno attraverso AJAX
- 25. di precisione in Erlang
- 26. creazione di un blocco di file in MATLAB (file mutex)
- 27. Python thread multipli/processi multipli per la lettura di porte seriali
- 28. Linee binari in multipart/form-data (upload di file)
- 29. Confronta file binari in C#
- 30. Lettura di file SIMPLE in Perl
Impressionante. Grazie per l'aiuto. Funziona perfettamente. – shunyo
@shunyo: felice di poterti aiutare. Hai confrontato questo con la tua soluzione usando 'memmapfile' in termini di prestazioni? – Amro
Sì, l'ho fatto. È un miglioramento di 5 volte in termini di velocità. Una soluzione molto utile, la tua. – shunyo