Skip to content
Snippets Groups Projects
readTsgIniLabview.m 6.32 KiB
Newer Older
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');

% 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);
% initialize contexte, eg [GLOBAL] in configuration file
% ------------------------------------------------------
context = [];

% read first line
% -------------
inputText = textscan(fid, '%s', 1, 'delimiter', '\n');

% test the end-of-file
% --------------------
while ~feof(fid)
  % use string instead cell
  % -----------------------
  str = inputText{1}{1};
  
  % check if line define a context
  % ------------------------------
  match = regexp(str , '^\[(.+)\]$', 'tokens');
  if ~isempty(match)
    context = match{1}{1};
  end
  
  % 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)
    % 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*["]*(.+?)["]*$');
      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
      
  % check if we are is the right paragraph context
  % ----------------------------------------------
  if strcmp(context, tsg.TYPE_TSG) || strcmp(context, tsg.TYPE_TINT)
    % Iterate from each element from object nca and additional variables
    % ------------------------------------------------------------------
    for ii = ncv_keys
      % 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*["]*(.*?)["]*$');
        match = regexp( str, regex, 'tokens');
      elseif ~isempty(strfind(clef, 'DEPH'))
        regex = strcat('^\s*', clef, '\s*=\s*["]*(.*?)["]*$');
        %regex = strcat('^\s*\w*_DEPH_?\w*\s*=\s*(\w.+)$');
        match = regexp( str, regex, 'tokens');
      else
        match = [];
      % 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};
            
            % convert date in julian day when key is 'DATE', else to double
            % -------------------------------------------------------------
            if strcmpi(k, 'DATE')
              v = datenumToJulian(datenum(v, 'dd/mm/yyyy'));
              
              % in case where comma is decimal separator, replace it
              % with by dot
              % ----------------------------------------------------
              v = str2double(regexprep(v, ',', '.'));
            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);
            % in case where comma is decimal separator, replace it
            % with by dot
            % ----------------------------------------------------
            tsg.(clef) = str2double(regexprep(match{1}{1}, ',', '.'));
            % fprintf('%s: %f\n', clef, tsg.(clef));
  % read next line
  % --------------
  inputText = textscan(fid, '%s', 1, 'delimiter', '\n');
end  % end of while loop

% Save the data in the application GUI
% ------------------------------------
setappdata( hMainFig, 'tsg_data', tsg );

% close .ini file
% ---------------
fclose(fid);