How do i solve this situation?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
MIHYUN
el 19 de Feb. de 2014
Comentada: MIHYUN
el 20 de Feb. de 2014
I have list of file like this.
trj.hst.00.+00
trj.hst.01.+00
trj.hst.02.+00
trj.hst.03.+00
...
So, I want to use while loop and The number of files is not fixed
I do not know whether to use some functions.
Are as follows: The code I wrote
c=0;
while (?)
file = sprintf('trj.hst.%02d.+00',c);
fid = fopen(file);
tline = fgetl(fid);
while ischar(tline)
matches = strfind(tline, '#');
num = length(matches);
if num > 0
tline = fgetl(fid);
else
B_temp = tline;
B = fscanf(fid, '%g %g %g %g %g %g %g %g', [8 inf]);
tline = fgetl(fid);
end
end
fclose(fid);
B2 = str2num(B_temp);
B = B';
res = [B2; B];
DATA(1,c).res = res;
% DATA.res_tline = B_temp;
c=c+1;
end
Thanks in advance.
0 comentarios
Respuesta aceptada
Carsci
el 19 de Feb. de 2014
Editada: Carsci
el 19 de Feb. de 2014
Use the output fid (fileID) from fopen for your while condition. When the while loop gets to the end of the list, if the file does not exist then fopen cannot open the file and fileID is -1.
Only use the functions when fopen successfully opens a file, i.e. when it returns a file identifier greater >= 3
fid=0; c=0;
while fid ~= -1
file = sprintf('trj.hst.%02d.+00',c);
fid = fopen(file);
if fid < 3 continue; end
disp(['MIHYUN: Reading ' file])
tline = fgetl(fid);
while ischar(tline)
matches = strfind(tline, '#');
num = length(matches);
if num > 0
tline = fgetl(fid);
else
B_temp = tline;
B = fscanf(fid, '%g %g %g %g %g %g %g %g', [8 inf]);
tline = fgetl(fid);
end
end
fclose(fid);
B2 = str2num(B_temp);
B = B';
res = [B2; B];
DATA(1,c).res = res;
DATA.res_tline = B_temp;
c=c+1;
end
Más respuestas (1)
Jos (10584)
el 19 de Feb. de 2014
This problem is composed of smaller problems that you may or may not have solved. You can at least tackle them one by one
Problem 1 - How to get the list of files
You can collect them all at once using dir
Myfiles = dir('tr.hst.*.+00') ;
Problem 2 - Load a single file
filename = ...
fid = fopen(filename)
% load the data
res = … % your code here
fclose(fid)
Problem 3 - Get the data of all the files
for k=1:numel(Myfiles)
filename = MyFiles(k).name ;
% code from problem 2 here
DATA(k).res = res ;
end
0 comentarios
Ver también
Categorías
Más información sobre File Operations en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!