使用matlab读取文本文件

Reading text files using matlab

我遇到了一个很奇怪的问题。像往常一样从文本文件中读取一个浮点数,测试文件只包含一个浮点数:

fid = fopen('file.txt','r');
a = fscanf(fid,'%f');
fclose(fid);

如果我省略 fclose... 行,然后再次 运行 fscanf...,我得到一个空数组,因为我已经扫描了文件的全部内容;这是正常行为。

我正在使用matlab 进行的分析需要四个并行进程(它们必须是独立的并且不能在彼此之间传递数据),每个进程都能够读取文件。分析需要几个小时的时间,四个进程不太可能在半小时内读取同一个文件,一个进程在任何其他进程之前读取并关闭它应该没有问题进程尝试读取它。我的并行化非常简单——这四个任务是从 matlab GUI 中手动启动的。

然而,实际发生的情况是第一个尝试读取文件的进程运行良好,然后其他进程失败,返回空数组,就好像文件没有正确关闭一样。我花了几个小时解决这个问题,但一无所获,有什么想法吗?

编辑:如果我使用 matlab 的 fprintf... 命令编写文件,它表现良好。它只是使用 c++ ofstream 库打印的文件似乎导致了问题。文件写入涉及的c++代码如下:

#include <iostream>
std::ofstream param_file ( "file.txt" );
param_file<<dataval;

我没有追查它的原因(也许是 matlab 错误?),但我有一个解决方法:

try
    fid = fopen('file_2.txt','r');
    a = fscanf(fid,'%f');
    fclose(fid);
    delete('file_2.txt');
    fid2 = fopen('file_2.txt','w');
    fprintf(fid2,'%f',a);
    fclose(fid2);
catch
    fid = fopen('file.txt','r');
    a = fscanf(fid,'%f');
    fclose(fid);
    fid2 = fopen('file_2.txt','w');
    fprintf(fid2,'%f',a);
    fclose(fid2);
end

此代码将尝试读取新文件(不是原始文件)。如果成功,则意味着有问题的线程先到达那里,然后将读取原始文件并创建一个具有不同名称的新文件。后续线程会成功读取新文件,并在读取后将其重置(通过删除和重写),以方便后续线程读取同一个文件。它很笨重,但不会以任何有意义的方式减慢程序速度,而且它有效!