How to export sub/nested structures using writestruct?
    17 次查看(过去 30 天)
  
       显示 更早的评论
    
Dear all,
Let's say I have structure  with 3 sub-strucures
 with 3 sub-strucures  such as
 such as  is also a structure.
 is also a structure.
 with 3 sub-strucures
 with 3 sub-strucures  such as
 such as  is also a structure.
 is also a structure.I want to export in XML the structures keeping the same tree structure.
I started to write a function:
function export_structure(input_structure)
    % 0/ input structure informations
    struct_name = inputname(1);
    names       = fieldnames(input_structure);
    nfields     = length(names);
    % 1/ initialisation to find sub structures
    count_substructs= 0;
    substruct_names = string([1:nfields]);
    % 2/ find the sub structures' names
    for k = 1:nfields
        if isstruct(input_structure.(names{k})) == 1
            count_substructs    = count_substructs+1;
            substruct_names(k)  = names{k};
        end
    end
    % 3/ remove the extra sub structures added by the initialisation
    if count_substructs ~= 0
        substruct_names = rmfield(substruct_names,string([count_substructs:nfields]));
    end
    % 4/ export all the structures
    for k = 1:count_substructs+1
        if isstruct(input_structure.(names{k})) == 1
            export_parameters(input_structure.(substruct_names{k}));
        else
            writestruct(input_structure, ...
                strcat(string(datetime),sprintf(...
                "--- %s parameters.xml",struct_name)));
        end
    end
It seems to work when I don't have sub-structures.
However when I have it does not.
Indeed, during my initialisation step, step 1, I create an array of strings of length  which is the maximum number of sub-structs in the input.
 which is the maximum number of sub-structs in the input.
 which is the maximum number of sub-structs in the input.
 which is the maximum number of sub-structs in the input.Then I try to find the sub-structs names, step 2. 
But I don't manage to check if the field of a struct is a stuct or not.
Any ideas?
Thanks a lot.
Best,
louis
0 个评论
采纳的回答
  Chris
      
 2022-9-20
        
      编辑:Chris
      
 2022-9-20
  
      If you want to write to a single output file, writestruct() already supports nested structs containing scalar or vector values.
If you are experiencing issues, it could be that a field contains a value that isn't a scalar or vector, or that the filename is not valid.
If you want a separate file for each struct, or to write a function that allows other kinds of values, the end of our other answer thread might be a good place to start.
0 个评论
更多回答(1 个)
  Chris
      
 2022-9-18
        
      编辑:Chris
      
 2022-9-18
  
      In step 3, you are trying to do an rmfield operation on a string array (rmfield is for structs only). If you want to remove the strings that don't correspond to a substruct, you could initialize like:
substruct_names = strings(3,1);
and remove the empty strings in step 3 like:
substruct_names(substruct_names = '') = [];
But then the logic in step 4 doesn't quite work yet.
6 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




