为for循环中的每个迭代创建一个单独的日志文件

时间:2019-03-28 07:23:18

标签: matlab logging fopen

我只想制作一个运行多个文件并将其输出存储在单独的日志文件中的脚本。

因此,我使用diary编写了代码以生成输出,但是diary函数只有1个日志文件,并且输出在同一日志文件中进行更新以进行剩余的迭代。目前,在我的testconfig_1文件中,我仅将打印内容用作内容。

然后我尝试使用fopen方法,因此我得到了多个日志文件,但是我不明白如何将这些数据放入通过fopen创建的日志文件中每次运行后。

% with diary method
clear all;
diary on;
instring ='testconfig_';
for x = 1:3 
fprintf ('Simulation on testconfig_%d \n' , x);
test = [instring num2str(x)];
run(test);
diary testconfig_(x).log;
end

% without diary method
clear all;
diary on;
instring ='testconfig_';
for x = 1:3
fprintf ('Simulation on testconfig_%d \n', x);
test = [instring num2str(x)];
run(test);
fid = fopen(sprintf('testconfig_%d.log',x),'w');
end

我想分别获得testconfig_1.logtestconfig_2.logtestconfig_3.log,并且我想分别打印in_testconfig_1in_testconfig_2in_testconfig_3

1 个答案:

答案 0 :(得分:2)

您正在使用command syntax来调用diary函数。

% Command syntax
diary filename.log
% Equivalent function syntax
diary( 'filename.log' );

请注意,使用命令语法时,尽管没有引号,所有参数都被视为字符串!

因此,当您执行diary testconfig_(x).log时,等效项是

diary( 'diary testconfig_(x).log' );

您所有的日志都具有相同的文件名,因为x从未被视为循环变量,因此它始终只是字符串的一部分!

您正在尝试使用名称中的loop变量创建字符串,因此不能使用命令语法。

相反,请使用如下函数语法:

filename = sprintf( 'diary testconfig_%d.log', x );
diary( filename ); % treat the filename variable as a variable, not a string

您不必声明中间的filename变量,还有其他创建filename字符串的方法,但是我希望这可以证明问题所在。