#octave #fopen #fread #fseek
#октава #fopen #fread #fseek
Вопрос:
У меня есть скрипт octave, который считывает текстовый файл с функциями (fopen, fseek и fread). В этом файле хранятся двоичные данные.
Сначала я читаю файл в цикле, подобном этому:
fid = fopen('myfile.txt', 'rb');
fseek(fid, 0);
for i = 1:5
data = fread(fid, 1000);
......
...<Opertions I want to do>
......
......
endfor
Он принимает 1000 бит за одну итерацию и вычисляет результаты для каждых 1000 бит.
Затем я прочитал файл из другой позиции, изменив строку fseek, как показано ниже:
fseek(fid, 1000);
Но все же он дает тот же результат, что и для первого слота (даже сейчас я не читаю первый слот), когда я читаю файл с самого начала.
Затем я сделал то же самое на другом компьютере, и у них это сработало в первый раз, но со второй попытки он показывает то же поведение. Сначала я подумал, что, возможно, есть проблема с моими скриптами или сгенерированным файлом, но затем он впервые заработал нормально на другом компьютере, тогда я думаю, что есть какая-то проблема с Octave. Может быть, мне нужно очистить память или что-то в этом роде.
Кто-нибудь когда-нибудь сталкивался с такой проблемой?
Комментарии:
1. Нет. Вы уверены, что содержимое вашего файла не повторяется каждые 1000 байт? Если нет, можете ли вы воспроизвести эту проблему на минимальном примере и скопировать, вставить его сюда, чтобы мы могли его попробовать? Какую версию octave и ОС вы используете?
2. Кроме того, можете ли вы а) проверить, был ли
fseek
он успешным, проверив его возвращаемое значение, и б) подтверждать положение курсора при каждом использованииftell
?