Changeset 14639
- Timestamp:
- 04/18/13 08:26:26 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/io/structtonc.m
r14630 r14639 10 10 11 11 %Check that field is not empty 12 if isempty(field) ,12 if isempty(field) | (isa(field,'struct') & numel(fields(field))==0), 13 13 if(step==1), disp(['skipping ' fieldname ' (empty)...']); end 14 14 return; 15 15 end 16 17 %Write field class 18 [var_id,counter] = declareclass(ncid,[fieldname '_class'],class(field),depth,var_id,counter,step); 16 19 17 20 %Double scalar … … 48 51 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id); 49 52 else 50 netcdf.putVar(ncid,var_id(counter), transpose(field));53 netcdf.putVar(ncid,var_id(counter),field); 51 54 end 52 55 … … 61 64 %Structures 62 65 elseif isa(field,'struct'), 66 sublength = numel(field); 63 67 subfields = fields(field); 64 sublength = numel(field); 65 if sublength==1, 68 allsubfields = ''; 69 for i=1:length(subfields), 70 allsubfields=[allsubfields subfields{i}]; 71 if i~=length(subfields), allsubfields=[allsubfields ' ']; end 72 end 73 %Write size 74 if step==1, 75 var_id(counter) = netcdf.defVar(ncid,[fieldname '_length'],'NC_INT',[]); 76 else 77 netcdf.putVar(ncid,var_id(counter),sublength); 78 end 79 counter=counter+1; 80 %Write fields 81 if step==1, 82 83 dim_id = netcdf.defDim(ncid,[fieldname '_fields_length'],numel(allsubfields)); 84 var_id(counter) = netcdf.defVar(ncid,[fieldname '_fields'],'NC_CHAR',dim_id); 85 else 86 netcdf.putVar(ncid,var_id(counter),allsubfields); 87 end 88 for n=1:sublength, 66 89 for i=1:length(subfields), 67 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step); 68 end 69 else 70 for n=1:sublength, 71 for i=1:length(subfields), 72 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i} '(' num2str(n) ')'],field(n).(subfields{i}),depth+1,var_id,counter,step); 73 end 90 [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i} '(' num2str(n) ')'],field(n).(subfields{i}),depth+1,var_id,counter,step); 74 91 end 75 92 end … … 77 94 %Cell 78 95 elseif isa(field,'cell'), 79 for i=1:length(field), 96 sublength = numel(field); 97 %Write size 98 if step==1, 99 var_id(counter) = netcdf.defVar(ncid,[fieldname '_length'],'NC_INT',[]); 100 else 101 netcdf.putVar(ncid,var_id(counter),sublength); 102 end 103 for i=1:sublength, 80 104 [var_id,counter] = structtonc(ncid,[fieldname '{' num2str(i) '}'],field{i},depth+1,var_id,counter,step); 81 105 end … … 83 107 %Objects 84 108 elseif isobject(field), 85 %First we need to keep track of the object class name86 [var_id,counter] = structtonc(ncid,[fieldname '_class'],class(field),depth,var_id,counter,step);87 109 subfields = fields(field); 88 110 for i=1:length(subfields), … … 92 114 disp(['skipping ' fieldname ' (format not supported)...']); 93 115 end 116 117 function [var_id,counter] = declareclass(ncid,fieldname,field,depth,var_id,counter,step); 118 119 if isa(field,'char') 120 if step==1, 121 dim_id = netcdf.defDim(ncid,[fieldname '_length'],numel(field)); 122 var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id); 123 else 124 netcdf.putVar(ncid,var_id(counter),field); 125 end 126 else 127 error('class name is not a string'); 128 end 129 130 %update counter 131 counter = counter+1; 132
Note:
See TracChangeset
for help on using the changeset viewer.