我对这个简单的代码有疑问
name=['r9460.txt']
fid=fopen(name,'r');
while ~(feof(fid)),
head=fscanf(fid,'%d',11)
if ~(isempty(head)),
m=head(4)
d=head(3)
y=head(2)
end
end
fclose(fid)
txt
是
5 1994 4 8 9 14 40 0 31 16 5
0.6 1
0.6 25
0.9 1
3.5 4
0.9 1
Matlab说
试图进入头部(4);因为数字(头)= 1,所以索引越界。
答案 0 :(得分:0)
在while循环的第一次迭代中,它从标题行读取前11个值,并正确地从这些值中分配值m
,d
和y
。
但是,您尚未到达文件的末尾(feof(fid)
返回0)。所以while循环继续;它读下一行。看看你的代码,我认为你不打算多次读入标题行 - 如果你的循环超过一次你将覆盖m / d / y值。那么为什么循环呢?如果您正在尝试阅读标题,那么请对文件的其余部分执行某些操作,您可能正在寻找:
name=['r9460.txt']
fid=fopen(name,'r');
head=fscanf(fid,'%d',11)
if ~(isempty(head)),
m=head(4)
d=head(3)
y=head(2)
end
while ~(feof(fid)),
% do something with the remaining data in the file
end
fclose(fid)
最后一个注意事项 - 如果标题后面的其余数据如上图所示,两个数值,并且您不需要逐行检查它,您可以一次性读取它与data = textscan(fid,'%f%f');
并没有任何循环。