[Matlab] Extraire données de plusieurs .dat

Résolu/Fermé
Canth Messages postés 2 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 26 mai 2009 - 26 mai 2009 à 11:26
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 - 26 mai 2009 à 14:17
Bonjour,

Je suis totalement novice sous Matlab.

Je souhaite extraire les données de plusieurs fichiers .dat dont le nom est incrémenté. Par exemple : file0000.dat puis file0001.dat ..... file2250.dat.

Ces fichiers contiennent 2 colonnes de valeurs séparées par des espaces et une 100aine de valeurs par colonne... Je souhaiterai par la suite faire de la statistique comme la moyenne (par exemple) de toutes les valeurs de la ligne 1 colonne1 de mes 2250 fichiers .dat.

Je ne sais pas trop par quel bout attaquer ca... j'ai cherché mais systematiquement je trouve des choses pour les données d'un seul fichier.

Merci d'avance

Canth
A voir également:

3 réponses

Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 375
26 mai 2009 à 12:40
Bonjour mon ami !

Une solution possible est d'utiliser la fonction fopen puis la fonction textscan pour chacun de tes fichiers, tu obtiendras un tableau de cellules.
Ensuite, pour pouvoir manipuler toutes ces données assez facilement, le mieux peut-être, sera que tu convertisses ton tableau de cellules en matrice à l'aide de la fonction cell2mat. Ici un tableau à trois entrées me paraît même plus approprié, les deux premières entrées pour les données de chaque fichier (des matrices en quelque sorte), la dernière entrée pour changer de fichier (des pages si on peut dire).

Consulte les aides pour savoir comment manipuler tout cela :
help fopen ou doc fopen
help textscan ou doc textscan
help cell2mat ou doc cell2mat

D'après les quelques informations que tu nous a données, cela donnerait quelque chose de ce genre :
C=cell(1,2,2250);
for p=1:2250
numfile=num2str(10000+p);
numfile=numfile(2:end);
fid=fopen(['file' numfile '.dat'],'r');
C(:,:,p)=textscan(fid, '%f %f');
fclose(fid);
end
C=cell2mat(C);
Ensuite pour faire par exemple la moyenne dont tu parlais dans ton message, il te suffit d'exécuter cette commande :
mean1x1=mean(C(1,1,:));
Il y a plusieurs fonctions pour les statistiques sous Matlab, en voici une liste non exhaustive :
mean (moyenne)
std (écart type)
var (variance)
cov (covariance)

De nouveau, consulte l'aide Matlab pour savoir comment utiliser au mieux ces fonctions ;-)

Pour finir, j'ajouterai que si ton institut/laboratoire/école/université possède aussi la Statistics Toolbox, tu auras accès à plus d'outils pour traiter tes données si tu as besoin de faire des choses un peu plus complexes. Prends ton temps et jette un petit coup d'œil à tout cela ;-)

Je te souhaite une bien bonne journée !
11
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 375
26 mai 2009 à 14:17
Il n'y a pas de quoi ;-)
Soit le bienvenu et à la prochaine !

Oups... j'ai oublié un point important, la conversion du tableau de cellules en tableau de réels à trois entrées (C=cell2mat(C);) ne fonctionnera que si tous tes fichiers ont le même nombre de lignes ;-)

Sinon il faudra penser à compléter les matrices plus petites du tableau de cellules avec des zéros par exemple, le plus simple étant je pense de le faire dans la boucle de lecture de chaque fichier plutôt qu'à la fin.
2
Canth Messages postés 2 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 26 mai 2009 1
26 mai 2009 à 13:52
Merci bcp pour cette réponse bien détaillée !

Je vais potasser les rubriques d'aide que tu as mentionnées et me dépatouiller avec tout ca.

En tout cas merci encore pour ta rapidité et pour ta réponse, c'est vraiment super.

Bonne journée :)
1