从CSV文件Matlab中读取特定列的数字数据?

时间:2019-11-15 11:32:39

标签: matlab csv

我有两个.csv文件,试图将它们作为数值矩阵读入Matlab。将其称为list_a,仅包含两列ID号和带有','分隔符的对应值(约50000行)。 list_b有6列带有';'定界符。我只对包含数字的前两列感兴趣;其他列包含我不关心的文本。

我最初尝试在Matlab中使用readtable函数,但是注意到这些值没有存储为数值,这是我的要求。在读取它们之后,我也不知道如何将它们转换为整数。

对于list_a,我使用了dlmread函数,我认为该函数会将文件读取为数字值。

对于list_b,我尝试使用dlmread函数,其中可以指定行和列的偏移量(https://www.mathworks.com/help/matlab/ref/dlmread.html#d117e329603)-但是,这里的问题是,文件的长度将来可能会改变,所以我不确定要输入的行偏移量。

考虑到我尝试对前1000行进行如下测试,我不确定我是否了解此功能的工作原理:

csv_matrix = dlmread(csv_fullpath,';',[1 1 1000 2]);

并随后收到以下错误消息-即使“字段号3”甚至都不应该放在首位:

Error using dlmread (line 147)
Mismatch between file and format character vector.
Trouble reading 'Numeric' field from file (row number 1, field number 3) ==>
RandomTextInFile\n Error in Damage_List_Reader (line 15)
csv_matrix = dlmread(csv_fullpath,';',[1 1 1000 3]);

给我的印象是,我使这个问题变得比原本要困难得多,因此,如果有更好的方法可以做到这一点,我非常高兴。

1 个答案:

答案 0 :(得分:0)

我建议像这样将fopen与textscan结合使用(例如,用于list_a):

file = fopen('list_a.csv');
out = textscan(file, '%d%f', 'delimiter', ',');
ID = out{1};
Vals = out{2};

'%d%f'指定FormatSpec,因此指定文件中数据格式化的方式。这样,您可以从csv文件捕获任何数据(也可以忽略数据)。我建议阅读textscan Matlab doc,以了解更多的格式问题。

P.S .:我认为,如果行数/列数不固定,则可以放置并“结束”(不带引号),而不是行偏移值之一。

相关问题