从文件读取时索引超出界限

时间:2014-02-20 10:04:23

标签: matlab indexing bounds

我对这个简单的代码有疑问

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,所以索引越界。

1 个答案:

答案 0 :(得分:0)

在while循环的第一次迭代中,它从标题行读取前11个值,并正确地从这些值中分配值mdy

但是,您尚未到达文件的末尾(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');并没有任何循环。