使用MATLAB定时器使用更新的值更新.csv文件
我有一个计时器,它每分钟更新脚本中的一个值使用MATLAB定时器使用更新的值更新.csv文件,matlab,loops,csv,timer,Matlab,Loops,Csv,Timer,我有一个计时器,它每分钟更新脚本中的一个值 Period = 60; % Update period in seconds tim = timer('Period', Period, 'ExecutionMode', 'fixedRate',... 'TimerFcn', 'MyScript'); start(tim) stop(tim) 每次计时器重置时,我希望将更新的值存储在.csv文件的下一行(同一列)中 %Writes the current value to
Period = 60; % Update period in seconds
tim = timer('Period', Period, 'ExecutionMode', 'fixedRate',...
'TimerFcn', 'MyScript');
start(tim)
stop(tim)
每次计时器重置时,我希望将更新的值存储在.csv文件的下一行(同一列)中
%Writes the current value to 60 mins.csv in row 1, column 1
csvwrite('60 mins.csv',MyValue,0,0);
我的猜测是,我需要一个计数器来随着每次更新的值/计时器迭代增加行号。我想收集至少1440个值(一整天)
有什么想法吗
注意:计时器应该将整个脚本放在一个无限循环中,以防有人怀疑
编辑:我尝试使用Alamakanambra的解决方案(不起作用)
检查csv的长度并增加当前行的写入值: 编辑: 好了,现在我明白了: 或: csvwrite('60分钟.csv',[csv;MyValue],0,0)
csvwrite
没有附加函数,因此当您执行此操作时
csvwrite('60分钟.csv',MyValue,len+1,0)代码>
它用空值填充len,0
之前的空格,然后将值放在后面(根据您打开文件的方式,您可能只能在顶部看到一个值,如果在Excel或类似工具中打开,您将看到空白)
相反,请使用dlmwrite
dlmwrite('60分钟.csv',MyValue',-append')代码>
不需要检查长度或指定行号;这只是将每个新值附加到文件的末尾。如果要在每个步骤中保存其他值,请说出时间和测量值:
dlmwrite('60分钟.csv',[time,MyValue],'-append')代码>我使用的是csvwrite('60分钟.csv',MyValue,0,0)
创建初始值,但这不起作用。您的代码只是在每次计时器重置时将值移动到下一行。对不起,为了更好的可读性,我已经包含了重新尝试使用您的代码。它在线程的主体中。现在我很困惑。什么不起作用?与csvwrite一致?值未更改?计时器不工作?我的脚本(由于太大而未包含)使用计时器每分钟更新一个值。我想将更新后的值添加到csv文件中,并将以前的值存储在上一行的同一csv文件中。即值=4添加到csv,计时器运行新值=64添加到csv下一行,计时器运行新值=38添加到csv下一行等。您的解决方案不会这样做。它不会保存旧值。如果您有帮助,请邀请我聊天。这非常有用。但是使用dlmwrite('60分钟.csv',MyValue',append')代码>仅更新前两行中的值。在计时器重复的第3、4、5分钟内,不会添加第3行、第4行、第5行等。想法?没关系。我删除了csvwrite/dlmwrite的所有实例,只使用了一行dlmwrite('60min.csv',MyValue',-append')代码>成功了。非常感谢。
%Creates a new csv and writes MyValue to a csv at position 0,0
csvwrite('60 mins.csv',MyValue,0,0);
%Read csv and get csv length
csv = csvread('60 mins.csv');
len = length(csv);
csvwrite('60 mins.csv',MyValue,len+1,0);
csv = csvread('60 mins.csv');
len = length(csv);
csvwrite('60 mins.csv',MyValue,len+1,0);
csvwrite('60 mins.csv',[csv MyValue],0,0);