是否每分钟将60个最新值从追加的.csv复制到新的.csv?MATLAB

是否每分钟将60个最新值从追加的.csv复制到新的.csv?MATLAB,matlab,function,loops,csv,timer,Matlab,Function,Loops,Csv,Timer,我想从一个名为MyFile的.csv文件中提取60个最新值,该文件每分钟使用一个计时器函数在前一组下一行中追加3个新值: dlmwrite('MyFile.csv', [MyValue,MyValue2,MyValue3], '-append'); 假设100分钟后我在MyFile中有150行值,我想提取最新的60行值保存到另一个名为MyFile2的文件中。由于无休止的计时器,该过程会无限期地发生,即它会随着时间积累数据,因此MyFile.csv的行大小每分钟增加1。因此,每行中有3列数据,每

我想从一个名为
MyFile
的.csv文件中提取60个最新值,该文件每分钟使用一个计时器函数在前一组下一行中追加3个新值:

dlmwrite('MyFile.csv', [MyValue,MyValue2,MyValue3], '-append');
假设100分钟后我在
MyFile
中有150行值,我想提取最新的60行值保存到另一个名为
MyFile2
的文件中。由于无休止的计时器,该过程会无限期地发生,即它会随着时间积累数据,因此MyFile.csv的行大小每分钟增加1。因此,每行中有3列数据,每分钟新的一行。(忽略计时器,我只是在这里展示它的工作原理,并用于获取新的
MyValue
计时器:

如何从文件中连续复制60组最新的值并将它们存储在
MyFile2

是否有一个大小函数可用于.csv文件,以便它在.csv文件增长时获取其大小,然后提取添加到其中的最近60个值

我觉得这是最简单的方法,但我仍然不确定

粗略的伪代码我不确定(不认为它是正确的):

但是很明显,这里需要的代码是从每个行号中减去大小,以便将正确的值附加到
MyFile2
。希望我已经说清楚了。如果
MyFile
中还没有60行值,则应显示文本/字符串消息“N/a”

编辑*:霍奇勒解决方案收到错误:

Error in ==>
SoftwareMonitoringToolGUI>SoftwareMonitoringToolGUI_OpeningFcn at
1265
dlmwrite('MyFile2.csv',',',out(max(end-60,1):end));
输入的代码是:

out = dlmread('60 mins.csv',',');
dlmwrite('MyFile2.csv',',',out(max(end-60,1):end));

其中
'60 mins.csv'
我的文件的名称

除了读取整个文件外,没有真正的方法来获取csv文件的大小/长度。如果第一个CSV文件从未变得过大,您应该能够执行以下操作:

out = dlmread('MyFile.csv',',');
dlmwrite('MyFile2.csv',',',out(max(end-60,1):end));
将put保存到最后60个条目,从
'MyFile.csv'
保存到
'MyFile2.csv'
(不清楚第二个文件中到底需要什么)。您还可以检查
textscan
读取数据是否更快

其他可能性在相关问题中讨论


另一个选项可能是在CSV文件中创建一些专用字段,每次添加新数据时,新的大小/长度也会随之更新。然后你可以先阅读这些内容,知道当前元素的数量。

我想很清楚我想要第二个文件中的内容。我希望与第一个文件(格式和内容)相同,但只需要最近添加的60行。我尝试了你的建议,但出现了一个错误(我将用它更新我的线程)。或者,我是否可以将MyFile中第2列最近的60个值求和并将其存储为变量?我希望以这种方式获得数据的原因是计算第2列中存储的值在60分钟内的平均值,但我始终需要60个最新值来完成这项工作。谢谢
out = dlmread('60 mins.csv',',');
dlmwrite('MyFile2.csv',',',out(max(end-60,1):end));
out = dlmread('MyFile.csv',',');
dlmwrite('MyFile2.csv',',',out(max(end-60,1):end));