2013-10-02 3 views
4

Это сценарий, написанный кем-то еще, и я не понимаю, почему он дает мне эту ошибку (я не знаю Matlab, но это выглядит довольно простой сценарий, поэтому Я немного в тупике). Файл начинается сMatlab: error using fprintf

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

Затем он делает кучу вычислений, чтобы получить коэффициенты 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 ...? Не предполагается ли создать файл Nash.txt с инструкцией fopen (этот файл в настоящее время не существует в моей папке Runs /)? Что мне не хватает? Благодаря!

PS Я бегу Matlab2013a (группа лицензий через университет) на MacBook Pro с 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']; 

попробовать, то скажите мне, что» продолжается.

Смежные вопросы