Renaming a struct in v2020b
조회 수: 7 (최근 30일)
이전 댓글 표시
Christopher McCausland
2020년 11월 15일
댓글: Christopher McCausland
2020년 11월 16일
Hi,
I am currently writting code to detect peaks in a signal.
The data is pre-recorded in a series of dynamically named .mat files (i.e patient_1, patient_2 etc.) I want to try and move away from dynamic naming.
I want the user to select a .mat file say 'patient_1' for example and rename it to 'patient_X'. This should make it easier to write generic functions and apply them.
I have tried a similar method to inputing as one would with csv and other files with uigetfile:
[fileName, pathName] = uigetfile('*.mat'); % only looks for .mat files
pat_data = readstruct(fullfile(pathName,fileName)) ; % concat file path and type
However the new readstuct (2020b) function does not allow .mat data, only .XML so this does not work.
I have also tried just renaming the stuct like a standard variable:
pat_XXX = load(fileName) ; % Rename the struct
however I then get a 1x1 struct called pat_XXX with the orignal stuct inside it.
I really think this should be an easy task but I cannot figure out where I am going wrong and a look for answers has only provided how to change struct feildnames
Kind Regards,
Christopher
댓글 수: 0
채택된 답변
Image Analyst
2020년 11월 15일
I dont' think that renaming the files all to the same name is a good idea. Why can't you just deal with the original names. Have a listbox and load it up with all the .mat files. Let the user click on the one he wants to process and click the "Go" or "Analyze" button to process that particular file(s). In your function that processes a single file, just read in the mat file and get the fieldnames, something like (untested)
function results = AnalyzeSingleFile(fullFileName);
results = []; % Initialize
storedStructure = load(fullFileName);
% Now we need to extract the correct & relevant variable from the stored structure.
% OPTION 1: If field names vary (which was a bad idea)..
% Get the first structure and put it into pat_XXX
f = fieldnames(storedStructure);
pat_XXX = storedStructure.(f{1});
% OPTION 2: If field names are all the same, like each mat file has a field called Data, (much better), then...
pat_XXX = storedStructure.Data;
% Now process pat_XXX to get results...
추가 답변 (1개)
Walter Roberson
2020년 11월 15일
pat_data = load(fullfile(pathName, fileName));
save(newFileName, 'pat_data', '-struct')
Though you could also consider
movefile( fullfile(pathName, fileName), newFileName );
참고 항목
카테고리
Help Center 및 File Exchange에서 Structures에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!