Skip to content
Snippets Groups Projects
readTsgIniLabview.m 4.77 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);

% 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};

  % 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*(\w.+)$');
    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
  end
  
  % 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 = [];
    end
    
    % 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
    
  end % end ncv_keys

  % 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);