Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
function ncv = tsg_ncr( varargin )
% tsg_nc/tsg_nr -- Constructor for "tsg_nc" class.
% tsg_nc(varargin) constructs a 'tsg_nc' object from
% supplied csv 'filename'.
%
% Usage: nca = tsg_ncvar( file )
%
% Input
% -------
% filename ........... csv data filename
%
% Output
% --------
% ncv ........... instance of tsg_ncvar object
%
% See also: methods('tsg_ncvar').
%
% $Id: roscop.m 129 2007-03-16 08:56:31Z jgrelet $
% check varargin
% --------------
switch nargin
case 0 % create default object
error('csv filename not supplied');
case 1
if( isa(varargin{1}, 'char'))
file = varargin{1};
else
error('Wrong input argument');
end
otherwise
error('Wrong number of input arguments');
end
% check csv file validity
% -----------------------
fid = fopen( file, 'r' );
if fid == -1
error(['The specified data file ''%s'' does not exist ...\n' ...
'or is not in the directory which is on the MATLAB search path'],...
file);
end
% create hashtable
% ----------------
data = hashtable;
% read csv file
% -------------
header = textscan(fid,'%s \n %s [^\n]','headerlines', 3 );
members = textscan(header{1}{1},'%s','delimiter',';');
types = textscan(header{2}{1},'%s','delimiter',';');
values = textscan(fid,'%s','delimiter',';');
% populate private structure ncv
% ------------------------------
ncv.file = which( file );
ncv.size = numel(values{1}) / numel(members{1});
ncv.member = numel(members{1});
% loop
% ----
for i=1:ncv.size
for j=2:ncv.member
member = genvarname(members{1}{j});
type = genvarname(types{1}{j});
value = values{1}{j + ncv.member * (i -1)};
key = values{1}{1 + ncv.member * (i -1)};
% dynamically populate structure 'theStruct'
% ------------------------------------------
if isempty(values{1}{j + ncv.member * (i -1)})
theStruct.(member) = [];
else
switch type
case 'char'
theStruct.(member) = value;
case {'integer','double'}
theStruct.(member) = str2double(value);
otherwise
theStruct.(member) = value;
end
end
end
% populate the hashtable
% ----------------------
data = put(data, key, theStruct);
% initialize internal structure
% -----------------------------
theStruct = [];
end
% remove first member in structure, the key
% -----------------------------------------
ncv.member = ncv.member -1;
% bless tsg_ncvar class and inherite from hashtable data
% ------------------------------------------------------
ncv = class(ncv, 'tsg_nc', data );