2013-10-02 50 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']; 

尝试一下,然后告诉我什么继续。