Я боролся с этой ошибкой.При использовании MATLAB для чтения двоичного файла, который содержит три столбца чисел в форматах float
.
Я читаю по одному номеру за раз, используя эту строку.
pt(j) = fread(fid,1,'float','a');
Я обнаружил, что иногда (редко) MATLAB
вместо чтения четырех байтов для числа с плавающей запятой, он использует 5 байтов.И это пропускает остальную часть чтения.Я не уверен, что файл поврежден или MATLAB
содержит ошибку там.Когда я распечатал файл как текст и прочитал его, все работает хорошо.
В качестве решения этой проблемы я сделал следующее:
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');