How do i solve this situation?
조회 수: 1 (최근 30일)
이전 댓글 표시
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
채택된 답변
Carsci
2014년 2월 19일
편집: Carsci
2014년 2월 19일
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
추가 답변 (1개)
Jos (10584)
2014년 2월 19일
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
참고 항목
카테고리
Help Center 및 File Exchange에서 File Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!