Magelan merci, j'ai finalement réussit à faire quelque chose d'assez bon avec l'aide de mon tuteur. Je donne ici une solution même si je pense que cela n'intéressera pas grand monde :
L'ensemble est constitué de 3 fonctions, l'exécution du script auto va traiter les csv situé dans le répertoire DATA et créer en conséquence les différents sous-répertoire avec les fichiers int :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 function lecture_impedance(filename, pathname) % if size(pathname, 2)>27 % pathname=pathname(1:size(pathname,2)-1); % end %nomfich=fullfile(pathname,filename); nomfich=strcat(pathname,filename) %nomfich=nomfich(1:size(nomfich,2)-1); fid=fopen(nomfich); fid0=divise(filename, pathname,'PhData.int'); fid1=divise(filename, pathname,'Imp1.int'); fid2=divise(filename, pathname,'Imp2.int'); fid3=divise(filename, pathname,'Imp3.int'); fid4=divise(filename, pathname,'Imp4.int'); fid5=divise(filename, pathname,'Imp5.int'); fid6=divise(filename, pathname,'Imp6.int'); for k=0:5 tline = fgetl(fid); if ~ischar(tline), break, end end Num=0; while 1 Num=Num+1; tline = fgetl(fid); if ~ischar(tline), break, end S=sscanf(tline,',%f'); if (rem(Num,50)==1) fwrite(fid0,S(1),'short'); end; ph=10*S(1); S2=S(2:2:end)-S(3:2:end); fwrite(fid0,ph,'short'); fwrite(fid1,S2(1),'short'); fwrite(fid2,S2(2),'short'); fwrite(fid3,S2(3),'short'); fwrite(fid4,S2(4),'short'); fwrite(fid5,S2(5),'short'); fwrite(fid6,S2(6),'short'); end fclose(fid); fclose(fid1); fclose(fid2);fclose(fid3); fclose(fid4);fclose(fid5); fclose(fid6);fclose(fid0);
Code:
1
2
3
4
5
6 function fid0=divise(filename, passe, f0) ff0=filename(1:size(filename, 2)-4); ff0=strcat(passe,ff0,'\'); mkdir(ff0); f0=strcat(ff0,f0); fid0=fopen(f0,'w');
Ensuite pour lire le contenu je procède comme suit :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 clear all close all [c, w] = dos('dir C:\MATLAB701\work\IMP\DATA\*.csv /b'); P=strfind(w,'.csv'); pathname='C:\MATLAB701\work\IMP\DATA\'; deb=1; for i=1:numel(P), fin=P(i)+4; filename=w(deb:fin); t=strcat(num2str(i),'.....', num2str(deb), '....', num2str(fin),'.....', filename, '....', pathname); %disp(t); lecture_impedance(filename, pathname); deb=fin+1; end
Evidemment il faudra que j'adapte afin de lire tous les int dans les sous-répertoire mais ce script est valable pour un sous-répertoire donné. Tu me demandais pourquoi je divise par 10 : en fait dans le fichier de lecture, tu as sans doute remarqué que j'ai écrit ph=10*S(1) et par conséquent pour récupérer les bonnes valeurs je redivise par 10 dans le ficher qui récupère les différentes valeurs depuis les int. Je vais à présent corriger afin de n'avoir pas à supprimer manuellement (comme ci-dessus) le premier terme gênant.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 fid0=fopen('PhData.int'); fid1=fopen('Imp1.int','rb'); fid2=fopen('Imp2.int','rb'); fid3=fopen('Imp3.int','rb'); fid4=fopen('Imp4.int','rb'); fid5=fopen('Imp5.int','rb'); fid6=fopen('Imp6.int','rb'); valeurs_ph=fread(fid0,'short')/10; valeurs_ph([1])=[]; valeurs_Imp1=fread(fid1,'short'); valeurs_Imp2=fread(fid2,'short'); valeurs_Imp3=fread(fid3,'short'); valeurs_Imp4=fread(fid4,'short'); valeurs_Imp5=fread(fid5,'short'); valeurs_Imp6=fread(fid6,'short');
Voilà, je récapitule : je peux traiter les fichiers CSV d'un répertoire et créer les sous-répertoire portant le nom des fichiers et contenant les différents int. Il m'est possible de récupérer le contenu des int (il me faudra simplement essayer d'automatiser aussi cela). Cette opération est faite afin de conserver les fichiers et de n'avoir pas en mémoire toutes ces millions de données.
Bref, il me reste maintenant à exploiter les données, en particulier les Imp. Je voudrais faire des histogrammes et je dois ensuite effectuer des regroupements (analyse en composante principale). L'idée serait par exemple pour les Imp de récupérer dans un vecteur l'ensemble des données Imp1, Imp2...Imp6, ce que je peux faire à la suite de mon dernier code :
Maintenant je me demande ce que je peux bien faire de tout cela.Code:Imp=[valeurs_Imp1; valeurs_Imp2;valeurs_Imp3;valeurs_Imp4;valeurs_Imp5;valeurs_Imp6]