MATLAB et de matrice de cellules de la manipulation dans la boucle for
Je suis nouveau sur MATLAB et souhaitez extraire des données à partir d'une cellule de tableau que j'ai reçu de ma base de données:
sensors =
[ 1] [23] [1] [ 0] [0.1000] [1x29 char]
[ 2] [23] [1] [120] [0.1000] [1x43 char]
[ 3] [23] [1] [120] [0.1000] [1x42 char]
[ 4] [23] [1] [ 15] [0.1000] 'Air Temp Grey Box'
[ 5] [23] [1] [120] [0.1000] [1x34 char]
[ 6] [23] [1] [120] [0.1000] [1x33 char]
[ 7] [23] [1] [120] [0.1000] 'Pool Water Temp'
[ 8] [23] [2] [ 0] [0.1000] [1x28 char]
[ 9] [23] [1] [ 30] [0.1000] [1x22 char]
[10] [23] [1] [ 30] [0.1000] [1x22 char]
[11] [23] [1] [ 30] [0.1000] [1x21 char]
[12] [23] [1] [ 15] [0.1000] [1x20 char]
[13] [23] [1] [ 15] [0.1000] [1x23 char]
[14] [23] [1] [ 30] [0.1000] [1x22 char]
[15] [23] [1] [ 15] [0.1000] 'Ground Air '
[16] [23] [1] [ 5] [0.1000] 'Boiler Cold Water'
[17] [23] [1] [ 5] [0.1000] 'Boiler Hot Water'
[18] [23] [1] [ 5] [0.1000] 'Boiler CH Flow'
[19] [23] [1] [ 5] [0.1000] 'Boiler CH Return'
Maintenant, je voudrais saisir la première colonne, c'est à dire les nombres de 1 à 19 ans ainsi que les noms respectifs dans la dernière colonne et de les utiliser dans une boucle for, par exemple:
for ID=xxxx
str = num2str(ID);
SQLcommand = strcat('SELECT FROM data where ID=',str);
answer = database.exec(SQLcommand);
......
end
J'ai essayé plusieurs tentatives, mais n'a jamais réussi à obtenir qu'un des éléments.
Aide est très appréciée :), merci d'avance.
axon
Liées réponse - stackoverflow.com/questions/9055015/...
OriginalL'auteur aXon | 2011-01-08
Vous devez vous connecter pour publier un commentaire.
Si sage réponse ci-dessus fonctionne, il n'est pas vraiment appropriée, ou efficace l'utilisation de Matlab tableaux de cellules. Vous pouvez éliminer la plupart des étrangers appels de fonction en utilisant une matrice de cellules de l'indexation de contenu. vous pouvez vous adresser à n'importe quel élément d'une matrice de cellules de deux façons -
()
ou{}
.()
obtient la cellule, toujours dans une cellule.{}
cependant, en extrait le contenu de la cellule, c'est le type de base.Donc
sensors(1, end)
est une 1x1 cellule de tableau, maissensors{1, end}
est un 1x29 chaîne de char.Pour votre problème:
Vous pouvez également éliminer les
num2str()
appeler si vous avez récupéré l'ID du capteur comme un char au lieu d'un nombre - c'est à dire si votre original DB fetch qui ont peuplé les capteurs ne le casting.En outre, si vous n'avez pas encore l'interrogation à partir de la DB, vous pouvez vectoriser tout cela, mais je crains que je suis loin de ma Matlab machine, donc je ne peux pas construire que l'on trouve sur le dessus de ma tête.
OriginalL'auteur Marc
C'est un peu verbeux, car je l'ai expliqué à la volée, mais voici comment je ferais dans MATLAB:
Pas vraiment la plus efficace d'utiliser des tableaux de cellules. Vous avez oublié {} indexation.
OriginalL'auteur sage
C'est comment vous pouvez le faire en Octave. Octave de la cellule-matrice de la syntaxe est différente de
MATLAB, donc il y aura peut être d'une manière plus directe.
Pour l'essentiel, dans l'Octave de l'indexation des tableaux de cellules à l'aide de
{}
au lieu de()
.Le code suivant ne fonctionne pas dans l'Octave, mais n'en MATLAB:
Cela n'a pour moi: pour ctr = 1:length(capteurs); idStr = num2str(capteurs{ctr,1}); nameStr=capteurs{ctr,6}; end; de Cette façon, je peux récupérer les infos que j'ai besoin, merci 🙂 Le second fonctionne aussi bien, de me donner tant de choses dans un tableau de double et un tableau de caractères 🙂
cette syntaxe est beaucoup plus agréable. Malheureusement, il ne fonctionne pas dans l'Octave, ah.
voir sage réponse, il s'avère Matlab pouvez utiliser des parenthèses.
Si vous n'avez pas l'esprit, je n'ai éditer votre post concernant la cellule d'indexation.
OriginalL'auteur mtrw