У меня есть приложение A, которое пишет в файл.
Я хочу использовать MATLAB для чтения N строк в реальном времени из этого файла.
Мой вопрос связан с этой записью: Как отображать данные в реальном времени из текстового файла в MATLAB
Автор одного из ответов упоминает следующий подход:
Вы не можете строить графики, используя жесткие условия реального времени, поэтому всегда может случиться так, что matlab пропустит временной интервал 10 мс. Вы должны использовать вариант 2, чтобы получить все данные.
Для начала: напишите функцию, которая считывает только новые данные, которые были записаны после последнего вызова. Для этого не закрывайте дескриптор файла. Сохраняет позицию.
Таким образом, вот мой код:
myfile_fid=fopen(filePath, 'rt')
waitForFileToHaveData(filePath, 10);
for readingIdx = 1:10
fgetl(myfile_fid)
end
Моя waitForFileToHaveData
функция, определяется следующим образом:
function waitForFileToHaveData(filePath, desired_length)
if (getNumLinesOfFile(filePath) < desired_length)
disp('###### not enough data in the file');
pause(0.02);
waitForFileToHaveData(filePath, desired_length);
end
end
function num = getNumLinesOfFile(file_to_read)
[status, result] = system( ['wc -l ', file_to_read] );
if(status~=1)
scanCell = textscan(result,'%u %s');
num = scanCell{1} - 2;
else
num = 0;
end
end
Результат:
Когда я попадаю в цикл for, myfile_fid
оценивается в 3
, а fgetl(myfile_fid)
оценивается в -1
. Если я распечатываю результаты getNumLinesOfFile(filePath)
, я вижу 20
. Странная часть заключается в том, что если я подожду, скажем, файл будет иметь 40
строк, и выполню приведенный выше код, я не получу ошибку. Я попытался просмотреть документацию, чтобы понять, почему fgetl
возвращает обратно -1
, но я не могу найти его в документации MATLAB 2018b. Есть упоминание о том, что myfile_fid
может вернуть -1
, но это только если файл не может быть открыт. Однако во время выполнения myfile_id
оценивается как 3.
Можно ли с помощью MATLAB прочитать N строк с момента последнего чтения в файле, в который записывается другое приложение?