我正在尝试使用 textread 函数在Matlab中读取 .samp 文件的数据。我想将文件的每个行放在一个数组中。这是.samp文件:
@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);
它不起作用并发出错误:
使用dataread时出错
无法从文件中读取整数(第1行,字段> 1)==> %CB = DATA(OBJ,'get_callbacks')返回
textread(第174行)错误
[varargout {1:nlhs}] = DATAREAD( '文件',varargin {:}); %#确定
如何键入命令才能正常运行?然后我应该怎么做才能将每一行(行)放在一个单独的数组中?
答案 0 :(得分:0)
尝试将完整文件路径指定为第一个参数。对我而言,将data
放入C:\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)];