Matlab: pb pour importer des données Famos

Fermé
socrate - 30 juin 2010 à 18:43
Bonjour,

Pour mon stage, je dois réaliser un programme qui permet d'importer des fichiers famos .dat dans Matlab
ces fichiers sont de la forme
|CF,2,1,1;|CK,1,3,1,1;
|NO,1,7,1,0,,0,;
|CG,1,5,1,1,1;
|CD,1,16,2E-2,1,1,s,0,0,0;
...

Chaque clé |XX permet d'identifier la caractéristique en question.
la clé |CG définit un groupe de données.
J'aimerais que le programme trouve chaque clé |CG, et enregistre les données qui suivent dans une cellule de la variable a2, jusquà ce qu'il rencontre la clé |CS, qui cloture le fichier.

Pour cela j'ai créé une fonction read(key,fid), qui trouve la clé key et copie les données de key dans une structure L
function [L]= read(key,fid)
% file = 'C:\Documents and Settings\p-sun\My Documents\MATLAB\IMC2Matlab\2009-12-0816-30-00.dat';
% fid=fopen(file,'r','b');
temp = fread(fid,[1,3],'*char');
while (strcmp(temp,key) ==0)
fseek(fid,-2,'cof');
temp = fread(fid,[1,3],'*char');
end;
% if temp == key

Semikolon=fread(fid,1,'*char');
i=0;
while Semikolon ~= ';'
Semikolon = fread(fid,1,'*char');
i=i+1;
end;
fseek(fid,-i,'cof');
M={fread(fid,i-1,'*char')};
M1=textscan(cell2mat(M(1)),'%s','delimiter',',');
L={temp,M1{1,1}{1:end}};
fseek(fid,1,'cof');

Puis dans la fonction principale famosread, j'ai voulu utilisé une boucle while pour dire que: tant qu'on n'a pas atteint la clé CS, exécute les commandes suivantes
Voici le code
L= read('|CG',fid);
l=1;

while strcmp(L{1,1},'|CS') ==0


a2(l).AnzahlKomponenten = L{1,4};

L= read('|CN',fid);
if L{1,4}==0
a2(l).IndexGruppe = 'Keiner Gruppe zugeordnet';
else a2(l).IndexGruppe = L{1,4};
end;
a2(l).IndexGruppe;
a2(l).IndexBit = L{1,5};
Titel = L{1,8};
a2(l).L=L;

L= read('|CG',fid);
l=l+1;
end;

Mais à chaque fois que j'exécute le programme, Matlab affiche Busy et ne répond pas

Quelqu'un voit une solution?

PS: J'ai déjà eu des problèmes à cause du format du fichier famos dans lequel chaque clé occupe une ligne, ce qui pourrait laisser des espaces entre les clés, et posent des problèmes à la commande fread
je ne sais pas si le problème viendrait par là...
Merci,
A voir également: