how can I select .mat file to load from part of the name?

조회 수: 8 (최근 30일)
Pasquale
Pasquale 2019년 3월 20일
댓글: Pasquale 2019년 3월 21일
I need to load the following files one by one, using a for loop, because at each iteration I have to do some calculation with the variables of these files:
110-1-D2-6-sum.mat
110-1-D3-7-sum.mat
110-1-E0-8-sum.mat
110-1-E0-12-sum.mat
How can I do this? The problem is that the name changes not only in the last number, but also in the letters. I would load them using part of the name (D2-6; D3-7....)

채택된 답변

Walter Roberson
Walter Roberson 2019년 3월 20일
projectdir = pwd; %or appropriate directory name
looking_for = 'D2-6';
dinfo = dir( fullfile(projectdir, ['*' looking_for '*.mat']) );
filenames = fullfile(projectdir, {dinfo.name});
num_files = length(filenames);
results = cell(num_files, 1);
for K = 1 : num_files
this_file = filenames{K};
results{K} = Process_a_file(this_file);
end
  댓글 수: 4
Walter Roberson
Walter Roberson 2019년 3월 21일
Process_a_file would be a function that you would provide that would accept the file name and do whatever was appropriate with it. That would probably include load()
datastruct = load(filename); %returns a structure of all of the variables contained
var1 = datastruct.var1; %extract a particular one into a more convenient form
Pasquale
Pasquale 2019년 3월 21일
With datastruct, it seems to work. Thanks a lot

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Pasquale
Pasquale 2019년 3월 20일
Thanks for your answer. In my problem I have about 20 files with that kind of name. All of them must be loaded, but not together; that's why I need a for loop to load them one by one. Should I write all the "labels" inside looking_for in this way?
looking_for = ['D2-6' 'D3-7' 'E0-8'....]
  댓글 수: 3
Walter Roberson
Walter Roberson 2019년 3월 20일
The code I posted does load one by one. It loops through all of the file names that match the looking_for and processes them one at a time. Your sample display only happens to show one file for each particular combination of letter-number-dash-number and if that holds true then it would only match one file, but I wrote the code with the assumption that several might match.
The code above is not designed to look for multiple substrings; it would have to be modified for that.
Pasquale
Pasquale 2019년 3월 21일
Ok, thanks, I understood; surely this could be helpful for me. My problem is a bit different, and maybe simpler: as you said, I have only one file for each combination. So I would do something llike this:
label=[D2-6' 'D3-7' 'E0-8'...nlabel]
for i=1:length(label)
load(filename(label(i))
end
Is it possible?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 File Operations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by