我有两个.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]);
给我的印象是,我使这个问题变得比原本要困难得多,因此,如果有更好的方法可以做到这一点,我非常高兴。
答案 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 .:我认为,如果行数/列数不固定,则可以放置并“结束”(不带引号),而不是行偏移值之一。