Bonjour,
Je dois lire 150000 fichier qui contiennent en tout une centaine de millions de lignes. ça ne fait "que" 10 giga-octets en tout mais Matlab mets presque 3 heures à tout lire !!!
Explication : c'est à cause de la boucle for de la mort qui tue !
En effet, je ne sais pas comment faire pour lire un fichier binaire en entier dans une seule instruction Matlab. A ma connaissance, ça a l'air possible avec les fichiers texte (fscanf) : fscanf sait lire plusieurs lignes de texte selon des formats hétéroclites et ranger les résultats dans un joli tableau. Par contre ça ne m'a pas l'air possible avec les fichier binaires (fread) : pour fread, on ne peut tout lire d'un coup que si le format est uniforme, ce qui n'est pas le cas des fichiers que j'ai à lire.
Voilà le bout de code qui lit un de ces fichiers :
je serais très reconnaissant à celui ou celle qui m'aidera à supprimer cette boucle là
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 fileID = fopen(fni, 'r') ; % file header. 2 integers = 8 bytes = number 2 and the number or pairs of points H = fread(fileID, 2, 'int32') ; n = H(2) ; L = zeros(n, 1) ; U = zeros(n, 5) ; % each record is 44 bytes : one integer followed by 5 doubles. for i=1:n ; L(i,:) = fread(fileID, 1, 'int32') ; % 4 bytes. is always 2 U(i, :) = fread(fileID, 5, 'double') ; % +40. 5 double. first is always 1.0 end fclose (fileID) ;
merci
Partager