【问题标题】:octave large data set, doesn't disp() or write properly八度大数据集,不显示()或正确写入
【发布时间】:2013-02-03 22:23:16
【问题描述】:

我正在缓存一个庞大的数据集,然后将过滤后的分析数据写入磁盘。我的代码中有各种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() 似乎也是为了将数据推入更高优先级的绘图中。

【问题讨论】:

  • 你会在哪里暂停?我在想在打印的 for 循环结束时......
  • 如果您将其作为解决方案发布,我可以确认。除此之外,我需要更多关于你会做什么的细节。随意发布一个实际的答案......谢谢
  • 虽然有人已经投票了,但我想我只需要删除我的答案(pause 没有帮助)。不知道还有什么办法可以解决问题,也许改用 Matlab?
  • 由于价格差异(免费与数千美元),无法切换到 Matlab。

标签: matlab octave


【解决方案1】:

我以前也遇到过这个问题,你用 fflush 来解决它。写

fflush(stdout);

强制终端使用调用 fflush(stdout) 之前的所有打印结果和显示到标准输出的结果进行更新。我不确定你是否应该费心将输出刷新到文件中,因为它可能会使你的代码变慢,但如果你愿意,你可以这样做

fflush(out);

【讨论】:

  • 谢谢。我将在一天左右的时间内检查出来;我非常感谢您的意见,并且感觉这实际上可能会奏效。顺便说一句-我会使用 both fflush(stdout)fflush(out) 吗?
  • fflush(stdout) 强制终端使用结果和 fflush(out) 强制更新您的文件。如果您希望在 for 循环中同时更新终端和文件,则必须同时执行这两项操作。
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
相关资源
最近更新 更多