Matlab:使用fprintf时出错

时间:2013-10-02 14:37:03

标签: matlab printf

这是一个由其他人编写的脚本,我不明白为什么它会给我这个错误(我真的不知道Matlab,但这似乎是一个相当简单的脚本,所以我有点难倒)。 该文件以

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

然后进行一系列计算以获得Nash-Sutcliffe系数(对于此问题不重要),然后尝试将结果写入一个文件:

    %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(这个文件目前在我的文件夹Runs /中不存在)?我错过了什么?谢谢!

PS我在OSX 10.8的MacBook Pro上运行Matlab2013a(通过大学获得团体许可)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我正在运行Win 10和matlab 2015a,但它也发生在我的。

最后,我意识到matlab.exe无法在文件夹/../ bin /

中写入文件

所以,改为

Nameout=['C:\Users\yourname\DesktopNash'];
尝试一下,然后告诉我什么'继续。

答案 2 :(得分:0)

好的,正如我所说,我不知道Matlab ......我没有正确指定写作的路径!所以它正在阅读输入但我想不知道在哪里写。谢谢你的答案,它确实帮我缩小了问题范围!