diff --git a/jload.m b/jload.m index ecaeae3b99c2cd90fd127a7ad4797aaa226f931e..fba169d9c1cdae3a8bb478f6495fad3dfd081614 100644 --- a/jload.m +++ b/jload.m @@ -3,6 +3,8 @@ function varargout=jload(filename, varargin) % jload % or % jload(fname) +% varlist=jload(fname) +% [varlist, header]=jload(fname) % varlist=jload(fname,'param1',value1,'param2',value2,...) % % Load variables from a JSON or binary JSON file to a workspace @@ -33,13 +35,16 @@ function varargout=jload(filename, varargin) % can be used to adjust the parsing options % % output: -% varlist: a list of variables loaded +% varlist: a struct with each subfield a variable stored in the file, +% if output is ignored, the variables will be loaded to the +% workspace specified by the 'ws' option, which by default +% load the variables to the current workspace ('caller') % % examples: % jload % load all variables in jamdata.jamm to the 'caller' workspace % jload mydat.jamm % jload('mydat.jamm','vars', {'v1','v2',...}) % load selected variables -% jload('mydat.jamm','simplifycell',1) +% varlist=jload('mydat.jamm','simplifycell',1) % % license: % BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details @@ -48,7 +53,7 @@ function varargout=jload(filename, varargin) % if(nargin==0) - filename='jamdata.jamm'; + filename=[pwd filesep 'jamdata.jamm']; end opt=varargin2struct(varargin{:}); @@ -75,11 +80,6 @@ else header=loadfun(filename,'ObjectID',1, varargin{:}); end -if(jsonopt('Header',0,opt)) - varargout{1}=header; - return; -end - allvar=fieldnames(header.WorkspaceHeader); varlist=jsonopt('vars',allvar,opt); @@ -96,10 +96,13 @@ else body=loadfun(filename,'ObjectID',2, varargin{:}); end -for i=1:length(varlist) - assignin(ws, varlist{i}, body.WorkspaceData.(varlist{i})); -end - -if(nargout>1) - varargout{1}=varlist; +if(nargout==0) + for i=1:length(varlist) + assignin(ws, varlist{i}, body.WorkspaceData.(varlist{i})); + end +else + varargout{1}=rmfield(body.WorkspaceData,setdiff(fieldnames(body.WorkspaceData),varlist)); + if(nargout>1) + varargout{2}=header; + end end \ No newline at end of file diff --git a/jsave.m b/jsave.m index de1ba50af92dc710fcddd494ddb3db6e9a4f052c..88064ef63e2852e9dd2fd7ec3dca4a7ddee68fec 100644 --- a/jsave.m +++ b/jsave.m @@ -45,7 +45,7 @@ function varargout=jsave(filename, varargin) % if(nargin==0) - filename='jamdata.jamm'; + filename=[pwd filesep 'jamdata.jamm']; end opt=varargin2struct(varargin{:}); diff --git a/loadbj.m b/loadbj.m index 60cc0a03685191bf34417a033de73d5d23cd1a0d..847b8edaadee800ff9265cf1655928d7e010306c 100644 --- a/loadbj.m +++ b/loadbj.m @@ -63,8 +63,10 @@ function data = loadbj(fname,varargin) fid = fopen(fname,'rb'); string = fread(fid,inf,'uint8=>char')'; fclose(fid); - else + elseif(regexp(fname, '^\s*[\[\{SCHiUIulmLMhdDTFZN]')) string=fname; + else + error_pos('input file does not exist or buffer is invalid'); end pos = 1; inputlen = length(string); inputstr = string; @@ -156,7 +158,7 @@ function [object, pos] = parse_array(inputstr, pos, varargin) % JSON array is w [cc,pos]=next_char(inputstr,pos); if(cc=='[') if(isfield(varargin{1},'noembedding_') && varargin{1}.noembedding_==1) - error('ND array size specifier does not support embedding'); + error_pos('ND array size specifier does not support embedding'); end varargin{1}.noembedding_=1; [dim, pos]=parse_array(inputstr, pos, varargin{:}); @@ -342,7 +344,7 @@ function pos=error_pos(msg, inputstr, pos) end msg = [sprintf(msg, pos) ': ' ... inputstr(poShow(1):poShow(2)) '<error>' inputstr(poShow(3):poShow(4)) ]; - error( ['JSONLAB:InvalidFormat: ' msg] ); + error( ['JSONLAB:BJData:InvalidFormat: ' msg] ); end %%------------------------------------------------------------------------- diff --git a/loadjson.m b/loadjson.m index 59f3763366ecbe15f0b923ea79b9bd64d4e95826..69811ed1223215de1d4171fe6ff98fdd268729b1 100644 --- a/loadjson.m +++ b/loadjson.m @@ -100,7 +100,7 @@ function data = loadjson(fname,varargin) end end else - error('input file does not exist'); + error_pos('input file does not exist'); end pos = 1; inputlen = length(string); inputstr = string; @@ -489,7 +489,7 @@ function pos=error_pos(msg, inputstr, pos) end msg = [sprintf(msg, pos) ': ' ... inputstr(poShow(1):poShow(2)) '<error>' inputstr(poShow(3):poShow(4)) ]; - error( ['JSONLAB:InvalidFormat: ' msg] ); + error( ['JSONLAB:JSON:InvalidFormat: ' msg] ); end %%------------------------------------------------------------------------- diff --git a/loadmsgpack.m b/loadmsgpack.m index 87ec3b3fabd51f6d11a50783e8f47f3a79429894..7a257263cea2494e472258920a5569c341a74ca8 100644 --- a/loadmsgpack.m +++ b/loadmsgpack.m @@ -188,7 +188,7 @@ function [obj, idx] = parse(bytes, idx, varargin) len = double(bytes2scalar(bytes(idx+1:idx+4), 'uint32')); [obj, idx] = parsemap(len, bytes, idx+5, varargin{:}); otherwise - error('transplant:parsemsgpack:unknowntype', ... + error('JSONLAB:MSGPACK:InvalidFormat', ... ['Unknown type "' dec2bin(currentbyte) '"']); end end