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

조회 수: 10 (최근 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에서 Workspace Variables and MAT-Files에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by