【发布时间】:2019-06-24 21:07:48
【问题描述】:
我有一个应用程序 A,它写入文件。 我想用 MATLAB 从这个文件中实时读取 N 行。
我的问题与此堆栈帖子有关:How to plot real time data from text file in 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,但我似乎无法在 2018b MATLAB 文档中找到它。有人提到myfile_fid 可以返回-1,但这只是在文件无法打开的情况下。但是,在运行时,myfile_id 的计算结果为 3。
使用 MATLAB,是否可以在另一个应用程序正在写入的文件中读取自上次读取以来的 N 行?
【问题讨论】:
标签: matlab