2014-09-05 1 views
2

Я совершенно новый для Matlab и программирования в целом и хотел бы получить некоторую помощь в следующем. Я смотрю здесь, на веб-сайте, но не нашел ответа.создать несколько текстовых файлов, используя fapen matab в for-loop

Я пытаюсь использовать for-loop и fprintf, чтобы дать мне кучу отдельных текстовых файлов, имена файлов которых содержат индекс, который я использую для моего цикла for. Смотрите, например этот кусок кода, чтобы получить представление о том, что я хотел бы сделать:

for z=1:20 
    for x=1:z; 
     b=[x exp(x)]; 
     fid = fopen('table z.txt','a'); 
     fprintf(fid,'%6.2f, %6.2f\n',b); 
     fclose(fid); 
    end 
end 

Что я ищу, это скрипт, который (в данном случае) дает мне 20 отдельных файлов .txt с таблицей имен i.txt '(i от 1 до 20), где Таблица 1.txt содержит только [1, exp (1)], Таблица 2.txt содержит [1, exp (1)] \ newline [2 , exp (2)] и так далее.

Если я запускаю сценарий выше, я получаю только один текстовый файл (с именем «table z.txt» со всеми данными, добавленными под ним. Таким образом, имя fopen не «чувствует» значения z, а интерпретирует z как письмо (которое, видя кавычки, меня действительно не удивляет)

Я думаю, что должен быть элегантный способ сделать это, но я не смог его найти. Надеюсь, кто-то может помочь. Best, L

ответ

1

использование num2str и конкатенация [ ... ].

fid = fopen(['table ' num2str(z) '.txt'],'a'); 
+1

спасибо! это то, что я после –

0

Открытие файла в внутреннем цикле неэффективно, вы должны создать файл, как только вы знаете z (смотрите пример ниже). Для формирования строки точно так же, fprintf , вы можете использовать sprintf.

for z=1:20 
    fname = sprintf('table %d.txt',z); 
    fid = fopen(fname,'w'); 
    for x=1:z 
     fprintf(fid,'%6.2f, %6.2f\n', x, exp(x)); 
    end 
    fclose(fid); 
end 
+0

спасибо! хорошие предложения –

Смежные вопросы