Use a string as a struct name

조회 수: 120 (최근 30일)
Ulrik William Nash
Ulrik William Nash 2019년 11월 10일
편집: James Tursa 2024년 5월 17일
In different files, I have a struct. Each struct has the same underlying structure and variable names. But the name of each struct is different, yet predicable by the filename
I want to programatically load the files (no problem), create a string from information in the filename (no problem), and then use this string as the structname. For example (getting data in the matrix 'age'):
filename = 'output_setting1.mat'
structname = 'setting1'
data = setting1.age
How can I convert structname = 'setting1' so I can use it as shown in the last line?

답변 (1개)

Walter Roberson
Walter Roberson 2019년 11월 10일
filename = 'output_setting1.mat';
file_struct = load(filename);
fn = fieldnames(file_struct);
data_struct = file_struct.(fn{1});
data = data_struct.age;
No need to dynamically create the name of a variable: you can create the name of a field instead.
  댓글 수: 2
Richard Mustakos
Richard Mustakos 2024년 5월 17일
편집: James Tursa 2024년 5월 17일
It turns out there is a good reason.
I have a file with a corrupted field. I can select the file in the file browser and see a list of all the contents. I can idividually select the fields and load them, except for the corrupted field.
So, for me, this is a fall back case to load all the fields except the corrupted ones, with the names from the files.
There are two ways I can handle this:
Use 'whos' to get the fields and walk through them inside a try-catch, if it works I add the name to a list of readable fields and then struct = load(filename,fields), which requires me tto load each field twice.
Use 'whos' to get the fields and walk through them inside a try-catch, adding it to the struct as a field. In this case I only readfields once.
Either way, no problem with maintenance as the names are those from the file, not arbitrary.
James Tursa
James Tursa 2024년 5월 17일
편집: James Tursa 2024년 5월 17일
@Richard Mustakos Is the file created by a 3rd party app and uncompressed? Can you manually edit the file and replace the corrupted fieldnames with valid ones, ensuring that the valid names are exactly the same length as the corrupted names? And then load the corrected file?

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

카테고리

Help CenterFile Exchange에서 Environment and Settings에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by