【问题标题】:Matlab: error using fprintfMatlab:使用 fprintf 时出错
【发布时间】:2015-10-26 16:43:15
【问题描述】:

这是别人写的脚本,我不明白为什么会出现这个错误(我不太了解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(通过大学获得的团体许可证)

【问题讨论】:

    标签: matlab printf


    【解决方案1】:

    在再次调用此脚本之前尝试使用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
    

    【讨论】:

    • 我试过关闭所有。然后如果我插入这个脚本,我会得到“错误打开文件”。所以这意味着文件没有创建?我仍然不确定为什么不呢? :-S
    【解决方案2】:

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

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

    所以,换成

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

    试试看,然后告诉我发生了什么。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 您能详细说明一下吗?也许显示您用来解决问题的代码?然后其他遇到问题的用户也有机会找到此解决方案。
      • 好吧,事实证明我不需要更改代码中的任何内容。我必须将“当前文件夹”(Matlab 2013a(Mac OSX 10.8)左侧的窗格)设置为我希望创建的文件所在的位置。它被设置为标准的 MATLAB 文件夹,但以一种或另一种方式写入该位置时遇到问题。
      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多