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;
|
||||
|
||||
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