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:
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....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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!
Partager