我在制表符分隔的.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列中“start”的行号(或行/列位置)。
我使用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
我希望得到一个矩阵,列出第二列中有'start'的行号。所以对于上面的例子,
rowNumbers =
2
9
相反,我得到'等号左边的表达式不是作业的有效目标。'
你不应该对字符串(或字符数组)进行相等比较,即使你可以(即当你进行数字比较时)你想要==
而不是=
。
相反,使用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' ) );