无法在Matlab中读取文件数据与文本读取

问题描述:

我试图读取.samp Matlab中的文件数据与textread函数。我想将文件的每个放在一个数组中。这是.samp文件:无法在Matlab中读取文件数据与文本读取

@CATEGORY:GENERAL 
@IMAGE:2012-04-26-Muenchen-Tunnel_4K0G0010.JPG 
# format: id type center.x center.y size.width size.height angle 
0 30 1319 2338 35 11 56.451578 
1 30 1337 2350 42 14 57.817368 
2 30 224 3556 61 20 136.967797 

当我尝试运行此命令:

[id, type, x, y, width, height, angle] = textread('data', '%d%d%d%d%d%d%f', 'headerlines', 3); 

它不工作,并给出了一个错误:

Error using dataread

Trouble reading integer from file (row 1, field > 1) ==> % CB = DATA(OBJ, 'get_callbacks') returns a

Error in textread (line 174)

[varargout{1:nlhs}]=dataread('file',varargin{:}); %#ok

我应该如何键入命令正确运行?我应该怎么做才能将每​​行(行)放在一个单独的数组中?

+0

好,首先你应该使用'textscan'作为'textread'已过时。接下来,我注意到你没有指定你的分隔符是一个空格,所以我建议你这样做,它应该解决问题。 – GameOfThrows

尝试指定完整的文件路径作为第一个参数。对我来说,把dataC:\Users\MyUsername\,然后调用

[id, type, x, y, width, height, angle] = textread('C:\Users\MyUsername\data',... 
                '%d%d%d%d%d%d%f',... 
                'headerlines', 3); 

是非常足以使其工作。但是,Matlab documentation建议将textread切换为textscan,因此您应该考虑这一点。

至于你的问题的第二部分:你真的希望你的文件只有三行吗?如果没有,你可以把你所有的列向量到矩阵,通过切片访问水平向量:

M = [id type x y width height angle]; 
M(1,:) % first line of your file 

但是,如果你希望有只三线,你可以使用

vec1 = [id(1) type(1) x(1) y(1) width(1) height(1) angle(1)]; 
vec2 = [id(2) type(2) x(2) y(2) width(2) height(2) angle(2)]; 
vec3 = [id(3) type(3) x(3) y(3) width(3) height(3) angle(3)]; 
+0

头条选项用于忽略文件的前3行(称为头文件) - 所以解析器只解析文件的其余部分,因为头文件通常具有特殊格式:即所有字符串。 – GameOfThrows

+0

@GameOfThrows当然,这只是提问者希望将所有行放入单独的数组中,并且当您不知道您期望的行数时,我不知道这是否可行或合理。示例文件有三行数据,似乎与图像有关,所以我假设三行可能用于不同的RGB通道或不同的数据 - 在这种情况下,数据每次只有3行。 – Nikita

+0

谢谢你的回答。我确实按照您的建议放置了完整路径,并且工作正常。这个文件是一个图像,只有三行。但是还有更多的这些文件有更多的线条。所以你说我应该导入每个文件并逐行进行分隔?或者有更快的方法? –