为 for 循环中的每次迭代创建一个单独的日志文件
Create a separate log file for each iteration in a for loop
我只想制作一个脚本,其中包含 运行 多个文件并将它们的输出存储在单独的日志文件中。
所以我通过使用 diary
编写代码来生成输出,但是 diary
函数只有 1 个日志文件,并且输出在同一个日志文件中更新以用于剩余的迭代。在我的testconfig_1
文件中,我目前只有打印内容。
然后我尝试使用 fopen
方法,我得到了多个日志文件,但我不明白如何将这些数据放入我通过 [=14 创建的日志文件中=] 在每个 运行.
之后
% 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.log
、testconfig_2.log
、testconfig_3.log
并且我想分别打印 in_testconfig_1
、in_testconfig_2
、in_testconfig_3
您正在使用 command syntax 调用 diary
函数。
% Command syntax
diary filename.log
% Equivalent function syntax
diary( 'filename.log' );
请注意,在使用命令语法时,所有参数都被视为字符串,尽管没有任何引号!
所以当你做 diary testconfig_(x).log
时,等价于
diary( 'diary testconfig_(x).log' );
你所有的日志都有相同的文件名,因为 x
永远不会被评估为循环变量,它总是只是字符串的一部分!
您正在尝试创建名称中包含循环变量的字符串,为此您不能使用命令语法。
相反,使用如下函数语法:
filename = sprintf( 'diary testconfig_%d.log', x );
diary( filename ); % treat the filename variable as a variable, not a string
您不必声明中间 filename
变量,还有其他方法可以创建 filename
字符串,但我希望这能说明问题。
我只想制作一个脚本,其中包含 运行 多个文件并将它们的输出存储在单独的日志文件中。
所以我通过使用 diary
编写代码来生成输出,但是 diary
函数只有 1 个日志文件,并且输出在同一个日志文件中更新以用于剩余的迭代。在我的testconfig_1
文件中,我目前只有打印内容。
然后我尝试使用 fopen
方法,我得到了多个日志文件,但我不明白如何将这些数据放入我通过 [=14 创建的日志文件中=] 在每个 运行.
% 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.log
、testconfig_2.log
、testconfig_3.log
并且我想分别打印 in_testconfig_1
、in_testconfig_2
、in_testconfig_3
您正在使用 command syntax 调用 diary
函数。
% Command syntax
diary filename.log
% Equivalent function syntax
diary( 'filename.log' );
请注意,在使用命令语法时,所有参数都被视为字符串,尽管没有任何引号!
所以当你做 diary testconfig_(x).log
时,等价于
diary( 'diary testconfig_(x).log' );
你所有的日志都有相同的文件名,因为 x
永远不会被评估为循环变量,它总是只是字符串的一部分!
您正在尝试创建名称中包含循环变量的字符串,为此您不能使用命令语法。
相反,使用如下函数语法:
filename = sprintf( 'diary testconfig_%d.log', x );
diary( filename ); % treat the filename variable as a variable, not a string
您不必声明中间 filename
变量,还有其他方法可以创建 filename
字符串,但我希望这能说明问题。