Rien d'extraordinaire ;-)
T'essayais de concaténer de
Spec_numfich jusqu'à
Spec_(nbrspec + numfich -1) comme pour un vecteur finalement, avec la même syntaxe que pour
(numfich : nbrspec + numfich -1) mais ça marche pas.
En fait, il fallait écrire dans une chaîne de caractères
[ Spec_numfich ... Spec_(nbrspec + numfich -1) ] et dire à Matlab d'évaluer cette expression.
Avec une boucle, ça doit pas être trop dur, tu définis une chaîne (
Spec_numfich) puis tu la concatènes avec
Spec_(numfich+1), etc, etc... puis tu l'évalues. Mais j'aime bien faire tout en vectoriel alors j'ai bidouillé. En règle général, c'est plus rapide mais pas sûr que ce soit le cas ici.
Pour résumer...
repmat(' Spec_',nbrspec,1) ça donne
Spec_
Spec_
Spec_
...
Avec un espace au début, sinon, après avoir combiné avec les indices, il y aura pas d'espace :
Spec_1Spec_2Spec_3 par exemple.
Ensuite, quand tu convertis un vecteur colonne de nombres (pour les indices) en chaîne de caractères, il y a des blancs, par exemple, si ton vecteur de nombre va jusqu'à 100, il y aura deux espaces blancs avant le 1, le 2, etc, etc... un espace blanc devant le 10, le 11, etc...
1
2
...
10
11
...
100
Pour enlever tous les espaces blancs, j'ai pas eu d'autre idées que d'associer ces lignes de chaînes de caractères (
num2str((numfich:nbrspec+numfich-1).')) à des cellules (
cellstr(num2str((numfich:nbrspec+numfich-1).'))) car en essayant d'enlever les blancs de l'ensemble de lignes, ça allait pas.
On obtient alors des cellules contenant toutes les lignes des chaînes de caractères. La fonction
strtrim marche alors cellule par cellule, aucun souci...
On concatène ensuite les
' Spec_' avec chaque nombre (
strvcat(strcat(repmat(' Spec_',nbrspec,1),strtrim(cellstr(num2str((numfich:nbrspec+numfich-1).'))))))).
D'ailleurs, ça marche alors qu'on concatène un tableau de caractères et des cellules de caractères, Matlab est sympa des fois, ce qui aurait été plus propre aurait été de concaténer des cellules avec des cellules, (
strvcat(strcat(cellstr(repmat(' Spec_',nbrspec,1)),strtrim(cellstr(num2str((numfich:nbrspec+numfich-1).'))))))), c'est ce que j'avais fait au début mais j'ai mal recopié, tu pourras remplacer, c'est plus joli :-D
Après on assemble toutes les cellules de caractères par concaténation verticale pour donner un tableau de caractères (
strvcat), je voyais pas comment faire directement pour obtenir une concaténation horizontale :-(
strvcat(strcat(repmat(' Spec_',nbrspec,1),strtrim(cellstr(num2str((numfich:nbrspec+numfich-1).')))))
On transpose ce truc parce qu'on va vouloir avoir toutes les chaînes sur une seule ligne, et que quand on redimensionne une matrice, Matlab lit colonne par colonne.
Et voilà... on redimensionne, on a lors la chaîne voulue (sur une ligne :
'Spec_numfich... Spec_(nbrspec+numfich-1)'). Mais il ne s'agit que d'une chaîne de caractères, donc on doit préciser à Matlab de l'évaluer (en rajoutant les
[ ] à la chaîne pour la concaténation puis avec le
eval).
Voii voilou ;-)
J'espère qu'il y a pas d'erreur, quand je l'ai testé, ça marchait, même avec cette histoire de concaténation d'un tableau et d'un tableau de cellules, j'avais pas fait gaffe.
Bonne nuit
Je teste ça demain !
à la vue de la réponse je pouvais me gratter la tête encore longtemps !!