尝试从csv文件加载混合数据并进行搜索

问题描述 投票:1回答:1

我在制表符分隔的.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

相反,我得到'等号左边的表达式不是作业的有效目标。'

matlab
1个回答
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' ) );
© www.soinside.com 2019 - 2024. All rights reserved.