我在制表符分隔的.tab文件中混合了数据。第一列是(大)数字,第二列和第三列是(或可以视为)文本。下面是一个示例,
9984847435 cheese 0
9984847438 start 100
9984849435 orange 100
9984847635 milk 0
9984847435 coffee 1
9984847835 three_blind_mice 1
9984847435 end 1
10000000123 juice 45
10000000124 start point
10000000223 ramen_y cattle_ranch_65.jpg
现在我想将此数据导入到matlab中。然后,我想按第1列对表格进行排序,然后搜索此数据,例如返回第2列中有“开始”位置的行号(或行/列位置)。
我已经使用readtable将数据导入为表格。
data = readtable ('sheet.tab', 'Format', '%u64%s%s', 'ReadVariableNames',false);
dataSorted = sortrows(data,1);
%Get row numbers for start
entry = 1;
for i = 1 : height(dataSorted)
if dataSorted(i,2) = 'start'
rowNumbers (entry,1) = i
entry+1
end
end
我希望得到一个矩阵,该矩阵列出第二列中有“开始”位置的行号。因此,对于上面的示例,
rowNumbers =
2
9
相反,我得到“等号左侧的表达式不是赋值的有效目标。”
答案 0 :(得分:0)
您不应该对字符串(或字符数组)进行相等比较,即使可以(例如,在进行数字比较时),您也希望==
而不是=
。
使用strcmp
if strcmp( dataSorted(i,2), 'start' )
% stuff
end
请注意,ismember
在这里更灵活,您可以摆脱整个循环而做
rowNumbers = find( ismember( dataSorted(:,2), 'start' ) );
编辑:
由于您使用的是表格,因此您需要为dataSorted
编制索引稍有不同...
rowNumbers = find( ismember( dataSorted{:,2}, 'start' ) );
% or using dot notation, where the 2nd column heading is 'Var2'
rowNumbers = find( ismember( dataSorted.Var2, 'start' ) );