[947] | 1 | % hdf5save_recursion.m |
---|
| 2 | % |
---|
| 3 | % hdf5save('filename','prefix',new,'name in workspace','name in hdf5 file',...) |
---|
| 4 | |
---|
| 5 | % Save the given variables in an hdf5 file in the groupe given by the |
---|
| 6 | % prefix. If new is set to one creates a new hdf5 file. Syntax Similar to |
---|
| 7 | % the native matlab save command. Can save strings, arrays, and structs. |
---|
| 8 | % If it find a struct it calls its recusively to save the struct, passing |
---|
| 9 | % the struct name as the prefix. |
---|
| 10 | |
---|
| 11 | % Author: Gael Varoquaux <gael.varoquaux@normalesup.org> |
---|
| 12 | % Copyright: Gael Varoquaux |
---|
| 13 | % License: BSD-like |
---|
| 14 | |
---|
| 15 | function hdf5save_recursion(filename,prefix,new,varcell) |
---|
| 16 | |
---|
[1013] | 17 | if ~strcmp(class(filename),'char'); |
---|
| 18 | error('first argument should be a string giving the path to the hdf5 file to save'); |
---|
| 19 | end |
---|
[947] | 20 | |
---|
[1013] | 21 | if ~strcmp(class(prefix),'char'); |
---|
| 22 | error('second argument should be a string giving the name of the groupe to save the data in'); |
---|
| 23 | end |
---|
[947] | 24 | |
---|
[1013] | 25 | if new~=1 && new~=0; |
---|
| 26 | error('third argument should be 0 or 1: 0 to append data, and 1 to create a new file'); |
---|
| 27 | end |
---|
[947] | 28 | |
---|
[1013] | 29 | nvars=size(varcell,2)/2; |
---|
[947] | 30 | |
---|
[1013] | 31 | if nvars~=floor(nvars); |
---|
| 32 | error('expecting a name for each variable'); |
---|
| 33 | end |
---|
[947] | 34 | |
---|
[1013] | 35 | for i=[1:nvars] |
---|
| 36 | str=varcell{2*i}; |
---|
| 37 | var=evalin('base',str); |
---|
| 38 | name=varcell{2*i-1}; |
---|
| 39 | type=class(var); |
---|
| 40 | location=strcat('/',prefix,name); |
---|
| 41 | %disp(['variable name in workspace : ',str]); |
---|
| 42 | %disp(['variable name to put : ',name]); |
---|
| 43 | switch type |
---|
| 44 | case 'struct' |
---|
| 45 | names=fieldnames(var); |
---|
| 46 | for j=1:size(names,1); |
---|
| 47 | if (j~=1 || i~=1) |
---|
| 48 | new=0; |
---|
| 49 | end |
---|
| 50 | varname=strcat(name,'.',names{j}); |
---|
| 51 | hdf5save_recursion(filename,strcat(name,'/'),new,{names{j},varname}); |
---|
| 52 | end |
---|
| 53 | otherwise |
---|
| 54 | location=strcat('/',prefix,name); |
---|
| 55 | if new==1 && i==1; |
---|
| 56 | hdf5write(filename,location,var); |
---|
| 57 | else |
---|
| 58 | %disp(['location : ',location]); |
---|
| 59 | hdf5write(filename,location,var,'WriteMode', 'append'); |
---|
| 60 | end |
---|
| 61 | end |
---|
[947] | 62 | end |
---|
| 63 | end |
---|