是否每分钟将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));