簡體   English   中英

為for循環中的每次迭代創建單獨的日志文件

[英]Create a separate log file for each iteration in a for loop

我只想創建一個運行多個文件的腳本,並將它們的輸出存儲在單獨的日志文件中。

所以我通過使用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

您正在使用命令語法來調用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字符串,但我希望這可以證明這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM