Создайте отдельный файл журнала для каждой итерации цикла for - PullRequest
3 голосов
/ 28 марта 2019

Я просто хочу создать скрипт, который запускает несколько файлов и сохраняет их результаты в отдельных файлах журнала.

Итак, я написал код, используя 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.log, testconfig_2.log, testconfig_3.log, и я хотел напечатать in_testconfig_1, in_testconfig_2, in_testconfig_3 соответственно

1 Ответ

2 голосов
/ 28 марта 2019

Вы используете синтаксис команды для вызова функции 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, но я надеюсь, что это демонстрирует проблему.

...