2013-02-03 66 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