Function not able to get nested structs
This commit is contained in:
		
							parent
							
								
									43184cd02f
								
							
						
					
					
						commit
						f7abd92a73
					
				| @ -1,7 +1,117 @@ | ||||
| function [outputArg1,outputArg2] = write_params_txt(inputArg1,inputArg2) | ||||
| function [] = write_params_txt(params) | ||||
| %WRITE_PARAMS_TXT Summary of this function goes here | ||||
| %   Detailed explanation goes here | ||||
| outputArg1 = inputArg1; | ||||
| outputArg2 = inputArg2; | ||||
| end | ||||
| 
 | ||||
| filename = strcat(params.Path,"/",params.Name,".txt"); | ||||
| struct2File(params,filename); | ||||
| 
 | ||||
|     function struct2File(s,fileName,varargin) | ||||
|     %Write struct to text file. The data in the struct can be both numbers and | ||||
|     %strings. The first line in the file will be a row with the headers/names | ||||
|     %of the columns. | ||||
|     %Ex: struct2File( s, 'c:/test.txt' ); | ||||
|     %Ex: struct2File( s, 'c:/test.txt', 'precision', 3 ); %specify precision | ||||
|     %Ex: struct2File( s, 'c:/test.txt', 'promptOverWrite', false ); | ||||
|     [varargin,align]=getarg(varargin,'align',false); | ||||
|     align=align{:}; | ||||
|     [varargin,delimiter]=getarg(varargin,'delimiter','\t'); | ||||
|     delimiter=delimiter{:}; | ||||
|     [varargin,units]=getarg(varargin,'units',''); | ||||
|     units=units{:}; | ||||
|     [varargin,promptOverWrite]=getarg(varargin,'promptOverWrite',false); | ||||
|     promptOverWrite=promptOverWrite{:}; | ||||
|     [varargin,precision]=getarg(varargin,'precision',6); | ||||
|     precision=precision{:}; | ||||
|     [varargin,Sort]=getarg(varargin,'sort',true); | ||||
|     Sort=Sort{:}; | ||||
|     if ~isempty(varargin) | ||||
|         error('Unknown optional arguments specified'); | ||||
|     end | ||||
|     fields = fieldnames(s)'; | ||||
|     if ~isempty(units) | ||||
|         if numel(units)~=numel(fields) | ||||
|             error('The number of units specified doesn not match the number of fields in the struct'); | ||||
|         end | ||||
|     end | ||||
|     if exist(fileName,'file')==2 && promptOverWrite | ||||
|         res = questdlg('File exists, overwrite?','', ... | ||||
|             'Yes', 'No', 'Yes'); | ||||
|         if strcmpi(res,'No') | ||||
|             disp('Aborted'); | ||||
|             return; | ||||
|         end | ||||
|     end | ||||
|     data=cell(numel(s),numel(fields)); | ||||
|     for k=1:numel(fields) | ||||
|         fn=fields{k}; | ||||
|         data(:,k) = {s.(fn)}; | ||||
|     end | ||||
|     if size(units,2)==1 | ||||
|         units = units'; | ||||
|     end | ||||
|     if ~isempty(units) | ||||
|         data=[units;data]; | ||||
|     end | ||||
|     data=[fields;data]; | ||||
|     if Sort | ||||
|         [fields,ind] = sort(fields); | ||||
|         data = data(:,ind); | ||||
|     end | ||||
|     %ex1 = {'a' 1 12 123; 'ab' 4 5 6; 'abc' 7 8 9}; | ||||
|     ex_func3 = @(input)ex_func(input,precision); | ||||
|     ex2 = cellfun(ex_func3,data,'UniformOutput',0); | ||||
|     if align | ||||
|         size_ex2 = cellfun(@length,ex2,'UniformOutput',0); | ||||
|         str_length = max(max(cell2mat(size_ex2)))+1; | ||||
|         ex2 = cellfun(@(x) ex_func2(x,str_length),ex2,'uniformoutput',0); | ||||
|         ex2 = cell2mat(ex2); | ||||
|     end | ||||
|     fid = fopen(fileName,'wt'); | ||||
|     if fid==-1 | ||||
|         error('Could not open %s'); | ||||
|     end | ||||
|     if iscell(ex2) | ||||
|         [m,n]=size(ex2); | ||||
|         for i=1:m | ||||
|             for j=1:n | ||||
|                 fprintf(fid,'%s',ex2{i,j}); | ||||
|                 if j<n | ||||
|                     fprintf(fid,delimiter); | ||||
|                 end | ||||
|             end | ||||
|             if i<m | ||||
|                 fprintf(fid,'\n'); | ||||
|             end | ||||
|         end | ||||
|     else | ||||
|         m=size(ex2,1); | ||||
|         for i=1:m | ||||
|             fprintf(fid,'%s',strtrim(ex2(i,:))); | ||||
|             if i<m | ||||
|                 fprintf(fid,'\n'); | ||||
|             end | ||||
|         end | ||||
|     end | ||||
|     fclose(fid); | ||||
|     function [ out ] = ex_func( in, prec ) | ||||
|         if iscell(in) | ||||
|             in = in{:}; | ||||
|         end | ||||
|         in_datatype = class(in); | ||||
|         switch in_datatype | ||||
|             case 'char' | ||||
|                 out = in; | ||||
|             case 'double' | ||||
|                 out = num2str(in, prec); | ||||
|             otherwise | ||||
|                 error('Unknown type'); | ||||
|         end | ||||
|     end | ||||
|     function [ out ] = ex_func2( in, str_length ) | ||||
|         a = length(in); | ||||
|         out = [char(32*ones(1,str_length-a)), in]; | ||||
|         {"mode":"full","isActive":false}; | ||||
|     end | ||||
|     end | ||||
| 
 | ||||
| end | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user