3 loops using sprintf to change directories doesn't quite work

2 visualizaciones (últimos 30 días)
Hello everyonem
I would like to do a code that write a txt procedure for another software, that go through a multiples folder to find files.
I got k main folders with each 2 subfolders (j and i)
The k and j variables are set and their value are correct in the workspace. But lines sprintf for k and j loop don't modify topo and dir1 and strut and dir2 names, so i don't have the good directory, example :
I have this
G:\Matthieu\Nomenclature\topo\strut\file1\file1.bdf
...
G:\Matthieu\Nomenclature\topo\strut\file9\file9.bdf
instead of that
G:\Matthieu\Nomenclature\topo1\strut3\file1\file1.bdf
...
G:\Matthieu\Nomenclature\topo1\strut3\file9\file9.bdf
Only file is modified. But i have the right amount of lines.
The code is below, I would appreciate any help! Also, if you think it should be optimised let me know!
Thanks a lot, Matt
clc
clear all
folder = sprintf('G:\\Matthieu\\Nomenclature\\script');
proc_array1 = dir('G:\\Matthieu\\Nomenclature\\topo*');
proc_array2 = dir('G:\\Matthieu\\Nomenclature\\topo1\\strut*');
proc_array3 = dir('G:\\Matthieu\\Nomenclature\\topo1\\strut0\\file*');
%size of folders check
num_models1=size(proc_array1, 1)
num_models2=size(proc_array2, 1)
num_models3=size(proc_array3, 1)
%create loop sizes
n_proc1 = size(proc_array1, 1);
n_proc2 = size(proc_array2, 1);
n_proc3 = size(proc_array3, 1);
%create txt
proc_f = fullfile(folder , 'fullproc.proc');
fid1 = fopen(proc_f,'w');
%txt constant strings to be printed
model_creation='*new_model\n yes \n';
yes='yes';
n='\n';
import='*import nastran ';
exec_proc='*exec_procedure G:\\Matthieu\\Nomenclature\\script\\basicprocedure.proc \n';
save_as='*set_save_formatted off *save_as_model ';
save='save_model';
base_dir='G:\\Matthieu\\Nomenclature';
slash='\\';
%loop 1 create topo1, topo 2
for k= 1:n_proc1
topo=sprintf('topo%k',k);
dir1=[base_dir,slash,topo,slash]
%loop 2 create strut0 to 4
for j= 1:n_proc2
strut=sprintf('strut%j',j);
dir2=[strut,slash]
%loop 3 create file1 to 10 and marc1 to 10
for i= 1:n_proc3
file=sprintf('file%i',i);
imp_name=sprintf('file%i.bdf',i);
exp_name=sprintf('marc%i.mud ',i);
full_dir=[dir1, dir2, file,slash]
total=[model_creation,n,save_as,full_dir,exp_name,n,yes,n,import,full_dir,imp_name,n,exec_proc,save,n];
fprintf(fid1,total);
end
end
end
fprintf(fid1,'*quit yes \n');
fclose(fid1);
% total=[model_creation,n,save_as,exp_name,n,imp_dir,imp_name,n,exec_proc,n,save,n,n];

Respuesta aceptada

Bjorn Gustavsson
Bjorn Gustavsson el 4 de Nov. de 2021
Have a good look at the help and documentation of fullfile. That function is made to help you generate full filenames with absolute or relative paths, in addition it will be system-independent such that your function will work in both microsoft's \-systems and UNIX's/Linux's and Apple's /-systems, and you will not have to manually concatenate directory-names and make sure that you get the right number of separators in (this is a great benefit as far as I'm concerned).
HTH
  1 comentario
Matthieu Aoun
Matthieu Aoun el 4 de Nov. de 2021
Thanks for the quick reply! I will take a look at this I didn't know this function

Iniciar sesión para comentar.

Más respuestas (2)

Matthieu Aoun
Matthieu Aoun el 4 de Nov. de 2021
Okay thanks for the help!
By the way, i just solved my problem : here is the new loop :
topo=sprintf('topo%i',k)
strut=sprintf('strut%i',j)
%instead of
topo=sprintf('topo%k',k)
strut=sprintf('strut%j',j)
I thought %i call i but %i means integer! Ahah
  3 comentarios
Matthieu Aoun
Matthieu Aoun el 4 de Nov. de 2021
Hey, I'll try to use fullfile as I want to make my code more robust. It's the first script I create as I'm in mechanical engineering. I'll post here if I have more questions, thanks!
Bjorn Gustavsson
Bjorn Gustavsson el 4 de Nov. de 2021
If it is your first time really doing matlab-programming there are a couple of useful hints:
Look for answers here, the search function is rather good.
Browse the help and documentation-pages, that gave me a decent overview of what functions were available.
Make use of the lookfor function - if you have a good keyword lookfor returns all functions with that keyword in the first line of the help - even if the function with the seemingly best match is not solving your problem its help-section might still have a function listed in the "see also"-section that does solve (most of) your problem.
Make good use of the file exchange - it is full of functions and toolboxes that can help you greatly.

Iniciar sesión para comentar.


Image Analyst
Image Analyst el 4 de Nov. de 2021

Categorías

Más información sobre Introduction to Installation and Licensing en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by