Skip to content
Snippets Groups Projects
readTsgIniLabview.m 5.46 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
  
  % 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
    % ------------------------------------
    regex = strcat('^\s*', clef, '\s*=\s*(.+)$');
    % 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
  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};
            
            % convert date in julian day when key is 'DATE', else to double
            % -------------------------------------------------------------
            if strcmpi(k, 'DATE')
              v = datenumToJulian(datenum(match{1}{2}, 'dd/mm/yyyy'));
            else
              v = str2double(match{1}{2});
            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);
            
          case 1
            
            % add value to variable array
            % ---------------------------
            tsg.(clef) = str2double(match{1}{1});
            
            % for debbuging only
            % ------------------
            %fprintf('%s: %f\n', clef, tsg.(clef));
        end
        
        % quit for loop
        % -------------
        continue
        
      end % end of match
  % 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);