2010-11-01 46 views
0

我有一個matlab程序,我從excel中導入一些數組。我試圖寫一個if語句看起來第一陣列中,說:MATLAB:使用If語句和字符串從其他數組返回值

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

如果列是一個「東西-1」,然後將其轉移到一個不同的排列,並計算3個值即是被賦予不同的變量名稱...任何指導將非常感謝!謝謝!

回答

0

您需要像Excel中的vlookup這樣的函數。

我寫了一個。這裏是源代碼:

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

哦,代碼很雜亂 – zhiqiang 2010-11-02 04:15:19

+0

瞭解如何格式化代碼。在編輯答案時,請查看文本字段上方的工具欄和右側的橙色問號。 – yuk 2010-11-03 00:49:14

0

問題是......不是很清楚,但讓我試着給你一些建議。

假設您從Excel工作簿中讀取了一些數據,其中第一行是標題,後面是大量帶數字的行。

[num,txt] = xlsread(excelFileName); 

使得num包含數字數據和txt字符串列標題。

然後您可以檢查列標題中的字符串Thing-1thingOneIdx是一個數組,其索引位於標題的列中。在你的例子中,它將是[1 2],因爲前兩列是Thing-1

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

您可以創建三個單元陣列,firstValuesecondValue,並thirdValue將存儲三個計算的結果。如果您需要將Thing-1數據保留在附加陣列中,則可以採用類似的方法。

%# 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