2010-11-01 3 views
0

J'ai un programme matlab dans lequel j'importe des tableaux d'Excel. Je suis en train d'écrire une instruction if qui regarde dans le premier tableau, disent:MATLAB: Utilisation de l'instruction If avec une chaîne pour renvoyer des valeurs provenant d'autres baies

Thing-1 Thing-1  Thing-3  Thing-5 

Si une colonne est une « chose-1 », puis il va à un tableau différent, et calcule 3 valeurs à recevoir des noms de variables différents ... toute directive serait très appréciée! Merci!

Répondre

0

Vous avez besoin d'une fonction comme vlookup comme dans Excel.

J'ai écrit un. Voici le code source:

function [content, index] = vlookup(m, e, column, lookcolumn) 


if isempty(m) || isempty(e), return; end 
if nargin <= 3, lookcolumn = 1; end 

isechar = ischar(e); 
assert(isechar || isnumeric(e), 'the second parameter must be a string or numeric'); 

if iscell(m) 
    content = {}; index = []; 
    if isechar 
     index = find(strcmp(e, m(:, lookcolumn))); 
     content = m(index, column); 
    else 
     for i = 1:size(m, 1) 
      if isnumeric(m{i, lookcolumn}) && m{i, lookcolumn} == e 
       content = [content; m(i, column)]; %#ok<*AGROW> 
       index = [index; i]; 
      end 
     end 
    end 
else 
    assert(~isechar, 'When the first para is a matrix, the second para must be numeric'); 

    index = find(m(:, lookcolumn) == e); 
    content = m(index, column); 
end 
+0

oh, les codes sont désordonnés – zhiqiang

+0

Apprenez à formater le code. Lorsque vous modifiez votre réponse, regardez la barre d'outils au-dessus du champ de texte et le point d'interrogation orange sur la droite. – yuk

0

La question est ... pas très claire, mais laissez-moi essayer et vous donner quelques suggestions.

Dites que vous avez lu certaines données d'un classeur Excel dans lequel la première ligne est en-têtes, suivie par beaucoup de lignes avec des nombres.

[num,txt] = xlsread(excelFileName); 

de sorte que num contient les données numériques et txt les en-têtes de colonnes de chaîne.

Ensuite, vous pouvez vérifier la chaîne Thing-1 dans les en-têtes de colonne. thingOneIdx est un tableau avec des index dans les colonnes de l'en-tête. Dans votre exemple, ce serait [1 2], puisque les deux premières colonnes sont Thing-1.

thingOneIdx = find(strcmp('Thing-1',txt)); 

Vous pouvez créer trois réseaux de cellules, firstValue, secondValue et thirdValue qui stockeront les résultats des trois calculs. Si vous devez conserver les données Thing-1 dans un tableau supplémentaire, vous pouvez le faire de manière analogue.

%# define cell arrays (do it in one go using deal) 
[firstValue,secondValue,thirdValue] = deal(cell(length(thingOneIdx),1)); 

%# for simplicity and readability, loop through isThingOneIdx to assign data 
for ct = 1:length(thingOneIdx) 
    myIdx = thingOneIdx(ct); 
    firstValue{ct} = someCalculation(num(myIdx,:)); 
    secondValue{ct} = someOtherCalculation(num(myIdx,:)); 
    %# etc 
end 
Questions connexes