这是一个由其他人编写的脚本,我不明白为什么它会给我这个错误(我真的不知道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(通过大学获得团体许可)
答案 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 ......我没有正确指定写作的路径!所以它正在阅读输入但我想不知道在哪里写。谢谢你的答案,它确实帮我缩小了问题范围!