2013-02-03 42 views
2

我有一个庞大的数据集,我正在缓存,然后将过滤后的分析数据写入磁盘。我的代码中有各种disp()命令以及fprintf()调用。倍频程大数据集,不显示()或写入不正确

我希望在进程运行时看到文件和屏幕上的结果,但是我发现我没有任何东西,直到我终止程序,此时所有的数据写入我的文件并且disp()充斥终端。

会不会有办法强制disp()fprintf()在处理时执行?

下面是一个例子:

function one(varargin) 
    setenv GNUTERM 'x11'; 

    dirname = strcat(pwd, '/fileset'); 
    files = dir(dirname); 
    disp('reading directory'), disp(dirname); 
    fileidx = find(~[files.isdir]); 
    out = fopen('write_data.txt', 'w'); 
    fprintf(out, '"--- var a[0]", "--- var [1]";\n'); 

    numfiles = length(fileidx); 
    for i = 1:numfiles 
     dispstring = sprintf('processing file %d of %d...', i, numfiles); 
     disp(dispstring); 
     filename = [dirname, '/', files(fileidx(i)).name]; 
     disp(filename); 
     fid = fopen(filename, 'r'); 

     %some processing here to obtain timevalues and maxvars 

     for i = 1:length(timevalues) 
      fprintf(out, '%d, %d;\n', timevalues(i), maxvars(i)); 
     end 
    end 

    fclose(out); 
end 

我看到this post,但我不知道它的提示方法适用于我。它似乎也是fflush()是为了将数据推送到更高优先级的图中。

+0

您会在哪停止暂停?我正在考虑打印的for循环结尾... – jml

+0

如果您已将其作为解决方案发布,我可以确认它。除此之外,我需要更多关于你会做什么的细节。随意张贴一个实际的答案... Thx – jml

+0

虽然有人已经upvoted它,我想我只是不得不删除我的答案('暂停'没有帮助)。不知道还有什么可以做的伎俩,也许切换到Matlab? –

回答

1

我以前有过这个问题,而且你是否fflush来解决它。写

fflush(stdout); 

迫使终端与所有的打印结果,并disps到stdout调用之前来到fflush(标准输出)进行更新。我不确定是否应该将输出冲洗到文件中,因为它可能会使您的代码变慢,但是如果您想要,您可以执行此操作。

fflush(out); 
+0

谢谢。我会在一天左右的时间内检查出来;我真的很感谢你的意见,并有一种感觉,这可能实际上可以解决。顺便说一句,我会使用*'fflush(stdout)'和'fflush(out)'吗? – jml

+0

fflush(标准输出)强制终端更新结果和fflush(out)强制更新到您的文件。如果您希望在for循环中更新终端和文件,则必须同时执行这两个操作。 – mfbutner