2013-10-02 1278 views
4

這是一個由別人編寫的腳本,我不明白爲什麼它給了我這個錯誤(我並不真正瞭解Matlab,但這似乎是一個相當直接的腳本,所以我有點難過)。 文件與Matlab:錯誤使用fprintf

clear all 
    filein=['Runs/']; 
    Namein1=['AIC']; 
    Nameout=['Nash']; 

啓動它,然後做了一堆計算得到納什薩特克利夫係數(對於這個問題並不重要),然後嘗試將結果寫入一個文件:

%Write Nash 
     %Output file writing 
    %Write file header 
    D={'Conbination','Nash with Error','Nash-error','RMSE','RMSE-error',... 
    'AIC', 'MinNash', 'MaxNash'}; 
    NameOut=[filein,Nameout, '.txt']; 
    fileID = fopen(NameOut,'w'); 
    for i=1:length(D)-1 
     fprintf(fileID,'%s\t',D{i}); 

然後更多的東西如下,但這是我得到的錯誤信息:

Error using fprintf 
    Invalid file identifier. Use fopen to generate a valid file identifier. 

    Error in Nash_0EV_onlyT (line 169) 
    fprintf(fileID,'%s\t',D{i}); 

我不明白這裏有什麼問題嗎?該腳本指定了該文件,並使用fopen ...?是不是應該用fopen語句創建文件Nash.txt(這個文件目前不存在於我的文件夾運行/)?我錯過了什麼?謝謝!

PS我在MacBook Pro上運行Matlab2013a(通過大學組許可)與OSX 10.8

回答

0

好了,正如我所說,我不知道...... Matlab的我沒有正確指定寫作的路徑!所以它正在讀取輸入,但我猜不知在哪裏寫入。感謝您的答案,它確實幫助我縮小了問題範圍!

+1

能否詳細說明一下?也許顯示你用來解決問題的代碼?然後遇到問題的其他用戶也有機會找到此解決方案。 –

+0

好吧,事實證明,我沒有改變代碼中的任何東西。我必須將「當前文件夾」(Matlab 2013a(Mac OSX 10.8)左側的窗格)設置爲我想要創建的文件所在的位置。它被設置爲標準的MATLAB文件夾,但有一種方法或其他方法在寫入該位置時遇到麻煩。 – Geraldine

3

嘗試再次調用此腳本之前使用fclose all。通常在測試時,文件句柄永遠不會被釋放(文件關閉前發生錯誤),導致同一文件上的fopen失敗。

更好的方式來做到這一點是使用更加故障安全結構:

NameOut = [filein Nameout '.txt']; 

fileID = fopen(NameOut,'w'); 

if fileID > 0 
    try 
     for i = 1:length(D)-1 
      fprintf(fileID,'%s\t',D{i}); 
     end 
     fclose(fileId); 

    catch ME   
     fclose(fileId); 
     throw(ME); 

    end  

else 
    error('Error opening file.'); 

end 
+0

我試過fclose。然後,如果我插入這個腳本,我會得到'錯誤打開文件'。那意味着文件沒有被創建?我仍然不確定爲什麼不呢? :-S – Geraldine

1

我運行Win 10和matlab 2015a,但它也發生在我的。

最後,我意識到,在文件夾中matlab.exe不能寫入文件/../bin/

因此,改變

Nameout=['C:\Users\yourname\DesktopNash']; 

嘗試一下,然後告訴我什麼繼續。