从矩阵列中读取和检测字符串

时间:2012-08-01 17:44:50

标签: string matlab matrix

我在矩阵中有一列字符串

X = ['apple1 (15%)'; 'apple2 (15%)'; 'apple3 (15%)'; 'orange1 (15%)'; 'orange2 (15%)'; 'orange3 (15%)' ]

我需要创建另一列矩阵来重新定义X的内容。

例如,我希望MATLAB将'apple'重新定义为1,将'orange'重新定义为2.所以最后我会期待这样的事情:

[1; 1; 1; 2; 2; 2]

但是,当我读取字符串列时,MATLAB无法读取字符串:

theMatrix = xlsread(myFile.xls);

for i = numTotalTrials;
 X = theMatrix(i,2)

> X = Nan

此外,我正在使用strfind重新定义列:

t = strfind(X,'a');
if t == 1
    newColumn = 1
else
    newColumn = 2
end

MATLAB是否以这种方式工作?谢谢!

2 个答案:

答案 0 :(得分:1)

使用正则表达式的另一种解决方案:

%# note the use of cell-arrays
X = {'apple1 (15%)'; 'apple2 (15%)'; 'apple3 (15%)'; 
     'orange1 (15%)'; 'orange2 (15%)'; 'orange3 (15%)'};

%# match either apples or oranges
m = regexp(X, '^(apple|orange)', 'match', 'once');

%# which one was found
[~,loc] = ismember(m, {'apple','orange'})

结果:

>> loc
loc =
         1
         1
         1
         2
         2
         2

答案 1 :(得分:0)

不知道,如果这是你想要的,但是从

开始
X = ['apple1 (15%)'; 'apple2 (15%)'; 'apple3 (15%)'; 
     'orange1 (15%)'; 'orange2 (15%)'; 'orange3 (15%)'];

我会定义一个输出向量result,循环输入并只查找 使用strfind的所需字符串,可能看起来像

result = zeros(size(X, 1), 1);
for row = 1 : size(X, 1)
    if ~isempty(strfind(X(row,:), 'apple'))
        result(row) = 1;
    elseif ~isempty(strfind(X(row,:), 'orange'))
        result(row) = 2;
    end
end

这将返回

result = [1; 1; 1; 2; 2; 2];