如何在MATLAB

时间:2018-11-14 17:38:29

标签: matlab fread

我一直在努力解决这个错误。使用MATLAB读取二进制文件时,该文件包含float格式的三列数字。

我正在使用此行一次读取一个数字。

    pt(j) = fread(fid,1,'float','a');

我发现有时(很少)MATLAB不会读取四个字节的浮点数,而是使用5个字节。它错过了其余的阅读内容。我不确定文件是否已损坏或MATLAB是否存在错误。当我将文件打印为txt并以txt格式读取时,一切正常。

在这里的工作是我所做的:

cur = ftell(fid);
if (cur - prev)~= 4
      pt(j) = 0; % I m throwing this reading away for the sake of saving the rest of the data. This is not ideal 
      cur = prev +4;
      fseek(fid, cur,'bof');
end
prev = cur; 

我尝试了不同格式float32 float64的不同组合,等等。。。MATLAB总是在这个特定位置读取5个字节,而不是4个字节。

编辑: 根据克里斯的答案来解决。我正在使用此命令打开文件。

fid = fopen(fname,'rt');

我用它替换了

fid = fopen(fname,'r');

1 个答案:

答案 0 :(得分:7)

有时候,很少跳过一个字节。在我看来,您好像在Windows上,并且已以文本模式打开文件。参见the permissions parameter to the fopen function

在Windows上以文本模式打开文件时,序列\r\n(13,10)被替换为\n(10)。这是在fread到达之前发生的。

因此,当打开文件时,不要这样做:

fid = fopen('name', 'rt');

此处的t表示“文本”。而是:

fid = fopen('name', 'r');

要对此进行明确显示,可以将b添加到权限中。这没有记录,但是应该是“二进制”,它使调用类似于您在C或POSIX fopen()中所做的操作:

fid = fopen('name', 'rb');