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 | %WRITE_PARAMS_TXT Summary of this function goes here | ||||||
| %   Detailed explanation 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