Création d'une structure récursive automatique
Bonjour a tous,
J'ai un petit soucis algorithmique que je n'arrive pas à résoudre proprement. Le problème est assez simple à énoncer, je voudrais construire une "structure" matlab fonctionnant comme tel à partir d'un ensemble de cellules de tailles différentes, de manière à ce que matlab reconnaisse les champs identique et construise une arborescence automatiquement. Ce sera plus clair avec ce bout de code exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
A{1} = {'chp1' ; 'chp2' ; 'chp3' ; 'chp4'};
A{2} = {'chp1' ; 'chp2' ; 'chp5'};
A{3} = {'chp1' ; 'chp2' ; 'chp3' ; 'chp6' ; 'chp7' ; 'chp8'};
S = struct ;
for i=1:length(A)
if size(A{i},1)==2 ;
S.(A{i}{1}).(A{i}{2})='valeurquelconque' ;
elseif size(A{i},1)==3 ;
S.(A{i}{1}).(A{i}{2}).(A{i}{3})='valeurquelconque' ;
elseif size(A{i},1)==4 ;
S.(A{i}{1}).(A{i}{2}).(A{i}{3}).(A{i}{4})='valeurquelconque' ;
elseif size(A{i},1)==5 ;
S.(A{i}{1}).(A{i}{2}).(A{i}{3}).(A{i}{4}).(A{i}{5})='valeurquelconque' ;
elseif size(A{i},1)==6 ;
S.(A{i}{1}).(A{i}{2}).(A{i}{3}).(A{i}{4}).(A{i}{5}).(A{i}{6})='valeurquelconque' ;
end
end |
Ce code me permet de lire les infos de champ dans ma cellule A, puis créer une structure S contenant l'arborescence de ces même champs. Le problème que l'on voit clairement est qu'en plus d'être une solution particulièrement laide, si A{4} par exemple contient 26 champs, cette méthode brute devient ingérable....
J'ai essayé un certain nombre de choses à base de "eval", "setfield", "getfield", et autres "subasgn", mais rien n'y fait, je n'arrive pas à incrémenter mon "nombre de couple père/fils" de manière automatique...
Y-a-t-il une solution à ce problème, ou ceci correspond-t-il à une limitation "sémantique" de matlab...?
Merci beaucoup de votre aide/opinion!