Newer
Older

jacques.grelet_ird.fr
committed
function readTsgIniLabview(hMainFig, fid)
% readTsgIniLabview(hMainFig, filename)
% read TSG labview acquisition .ini file
%
% Input
% -----
% hMainFig ............ Handle to the main user interface
% fid ............ file descriptor on the .ini file opened
%
% Output
% ------
% none ............. tsg struct is saved with setappdata
%
% $Id$
% Get the tsg struct from the application GUI
% -------------------------------------------
tsg = getappdata( hMainFig, 'tsg_data');

jacques.grelet_ird.fr
committed
% Get an instance of dynaload objetc from file 'tsgqc_netcdf.csv'
% -----------------------------------------------------------------
nc = dynaload('tsgqc_netcdf.csv');
% Get attributes & variables list from dynaload instance
% ------------------------------------------------------
nca_keys = keys(nc.ATTRIBUTES);
ncv_keys = keys(nc.VARIABLES);

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% initialize contexte, eg [GLOBAL] in configuration file
% ------------------------------------------------------
context = [];

jacques.grelet_ird.fr
committed
% read first line
% -------------
inputText = textscan(fid, '%s', 1, 'delimiter', '\n');
% test the end-of-file
% --------------------
while ~feof(fid)

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% use string instead cell
% -----------------------
str = inputText{1}{1};

jacques.grelet_ird.fr
committed
% check if line define a context
% ------------------------------
match = regexp(str , '^\[(.+)\]$', 'tokens');
if ~isempty(match)
context = match{1}{1};
end

jacques.grelet_ird.fr
committed
% check if we are is the right paragraph context
% ----------------------------------------------
if strcmp(context, 'GLOBAL') || strcmp(context, 'GENERAL') || ...
strcmp(context, tsg.TYPE_TSG) || strcmp(context, tsg.TYPE_TINT)

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% Iterate from each element from object nca and additional variables
% ------------------------------------------------------------------
for ii = nca_keys
% get key, use char because i is cell
% -----------------------------------
clef = char(ii);
% construct regex with pair cle=value
% and extract value
% use quantifier none greedy (.*?)
% remove double quote from expression : ["]*
% ---------------------------------------------------
regex = strcat('^\s*', clef, '\s*=\s*["]*(.+?)["]*$');

jacques.grelet_ird.fr
committed
match = regexp( str, regex, 'tokens');
% build tsg struct
% ----------------
if ~isempty(match)
%if isnan(str2double(match{1}{1}))
tsg.(clef) = match{1}{1};
%else
% tsg.(clef) = sprintf('%f',str2double(match{1}{1}));
%end
continue
end

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
% check if we are is the right paragraph context
% ----------------------------------------------
if strcmp(context, tsg.TYPE_TSG) || strcmp(context, tsg.TYPE_TINT)

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% Iterate from each element from object nca and additional variables
% ------------------------------------------------------------------
for ii = ncv_keys

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
% get key, use char because i is cell
% -----------------------------------
clef = char(ii);
% construct regex with pair cle=value and extract value
% simple variables are : SSPS_DEPH=8.00000000E+0
% coeff variables are : SSJT_CALCOEF_G=4,23058298E-3 or
% CNDC_LINCOEF_OFFSET=0.00000000E+0
% ------------------------------------
if ~isempty(strfind(clef, 'COEF'))
regex = strcat('^\s*', clef, '_(\w+)?\s*=\s*["]*(.*?)["]*$');

jacques.grelet_ird.fr
committed
match = regexp( str, regex, 'tokens');
elseif ~isempty(strfind(clef, 'DEPH'))
regex = strcat('^\s*', clef, '\s*=\s*["]*(.*?)["]*$');

jacques.grelet_ird.fr
committed
%regex = strcat('^\s*\w*_DEPH_?\w*\s*=\s*(\w.+)$');
match = regexp( str, regex, 'tokens');
else
match = [];

jacques.grelet_ird.fr
committed
end

jacques.grelet_ird.fr
committed
% build tsg struct
% ----------------
if ~isempty(match)
% variable SSPS_DEPH return one match, SSJT_CALCOEF_G two
% -------------------------------------------------------
switch size(match{1},2)
% in case of calibration coefficients, have key/value pair
% --------------------------------------------------------
case 2
% get key
% --------
k = match{1}{1};
% get value
% ---------
v = match{1}{2};

jacques.grelet_ird.fr
committed
% convert date in julian day when key is 'DATE', else to double
% -------------------------------------------------------------
if strcmpi(k, 'DATE')
v = datenumToJulian(datenum(v, 'dd/mm/yyyy'));

jacques.grelet_ird.fr
committed
else
% in case where comma is decimal separator, replace it
% with by dot
% ----------------------------------------------------
v = str2double(regexprep(v, ',', '.'));

jacques.grelet_ird.fr
committed
end
% add key to _CONV array, with length of STRING8
% ----------------------------------------------
tsg.([clef '_CONV']) = [tsg.([clef '_CONV']); padding(k, 8)];
% add value to coefficients array
% -------------------------------
tsg.(clef) = [tsg.(clef); v];
% for debbuging only
% ------------------
fprintf('%s: %s -> %f\n', clef, k, v);

jacques.grelet_ird.fr
committed
case 1
% add value to variable array
% in case where comma is decimal separator, replace it
% with by dot
% ----------------------------------------------------
tsg.(clef) = str2double(regexprep(match{1}{1}, ',', '.'));

jacques.grelet_ird.fr
committed
% for debbuging only
% ------------------
% fprintf('%s: %f\n', clef, tsg.(clef));

jacques.grelet_ird.fr
committed
end
% quit for loop
% -------------
continue
end % end of match

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
end % end ncv_keys

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
end % of of test in context

jacques.grelet_ird.fr
committed
% read next line
% --------------
inputText = textscan(fid, '%s', 1, 'delimiter', '\n');

jacques.grelet_ird.fr
committed

jacques.grelet_ird.fr
committed
end % end of while loop
% Save the data in the application GUI
% ------------------------------------
setappdata( hMainFig, 'tsg_data', tsg );
% close .ini file
% ---------------
fclose(fid);