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

时间:2019-02-06 12:22:57

标签: matlab

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

相反,我得到“等号左侧的表达式不是赋值的有效目标。”

1 个答案:

答案 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' ) );