【问题标题】:Reading a changing txt file matlab读取一个不断变化的 txt 文件 matlab
【发布时间】:2017-02-22 06:46:27
【问题描述】:

我有一个文本文件(5 列“\t”分隔)正在被另一个软件写入。我需要从文件中读取读数并进行一些计算。是否有一种方法是读取添加到文件中的新行并对其进行处理,然后对每组新行再次重复。只要它完成工作,我不介意一点延迟。

我的想法是开始逐行读取文件,直到文件结束,然后它将从上次停止的位置读取,直到文件的新结尾......等等。 这可以在matlab中完成吗?我可以指定文件读取的起始行吗?我也可以更新文件结束点吗?

为了防止循环在 eof 点中断,我认为我应该将循环设置为由时间或其他任何东西控制,同时它应该在每次迭代结束时检查 eof。

我主要使用 Matlab,但如果有更好的选择用于此目的(我可以合理地学习),请随时指导我。

Edit1:我已尝试按照您的建议使用 dlmread,当我在循环外读取文件时,即使我更改 R1 并且其他软件更新文本,它也会正确读取文件。但是,当我把它放在一个循环中时,我得到了这个错误: 使用 dlmread 时出错(第 143 行) 文件末尾不支持空格式字符串。

这是我多次阅读的代码:

    clear all
x=0;
R1=0; C1=0;
while(x<10)

    M = dlmread('tst_4.txt','\t',R1,C1);
    R1=length(M);
    x=x+1;
end

谢谢

【问题讨论】:

  • 您可以尝试使用dlmread,并根据您上次读取的文件指定读取数据的范围。

标签: matlab


【解决方案1】:

您可以使用dlmread(filename,delimiter,R1,C1)。其中 R1 和 C1 分别是行和列偏移量。通过将行偏移设置为您已读取的最后一行,您可以读取文件内容,不包括您已经读取的内容。

【讨论】:

  • 非常感谢,我在没有循环的情况下尝试了它(每次都更改 R1)并且它有效,但是当我将它放入循环并运行记录数据的程序时,它给出了这个错误:使用 dlmread 时出错(第 143 行)文件末尾不支持空格式字符串。我仍然可以读取文件(同时在 R 设置为不同值的情况下由其他软件在单个手动迭代中进行编辑。你知道为什么会这样吗?我将通过输入我的代码来编辑帖子。谢谢
  • 我不确定。稍后我将自己尝试一下,如果我设法解决问题,请告诉您。同时,我注意到您的代码中可能存在错误。您正在使用 length(M) 来获取矩阵中的行数。然而,length 函数返回最长边的长度。由于行数随着时间的推移而增加,因此一开始您可能会拥有比行更多的列。这意味着在下面的循环中,R1 将对应于列数。尝试使用 size(M,1) 来确保您始终获得行数
  • 我已经尝试了你的建议,我没有遇到任何错误,我运行了 50 秒,我能够阅读大约 4000 行,这很棒。我担心的是我在工作表上看不到尺寸更新,这是否意味着在读取完成之前无法进行处理?
  • dlmread 应该能够在文件更新后立即读取它们。我通过在 while 循环中运行 dlmread 来运行一个简单的测试,从 csv 文件中读取两列数字并输出它们的总和。一旦我对文件进行更改并保存它,总和就会相应地更新。这使我相信您的问题在您的逻辑范围内,而不是 dlmread。我建议您将此问题标记为已回答,并在需要时针对您的问题打开另一个问题,否则我们将脱离原始问题的主题。
猜你喜欢
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多