Skip to content
Snippets Groups Projects
decodeficlabview.m 4.9 KiB
Newer Older
function [date, time, lat, lon, sst, sss, cond, condRaw, sog, cog] =...
          decodeficlabview( fid, DELIMITER, ColNo, paraName, nPara ) 
%
% Fonction qui permet de lire les fichiers au format LabView
% La fonction :
% - lit les lignes incompletes
% - elimine les lignes d'entetes qui peuvent se trouver a differents
%   endroits du fichier
%   
%   ATTENTION : Je fais l'hypothese que la premiere ligne du fichier
%               est une ligne d'entete
%
% input
%   fid ........... Numero logique du fichier a decoder
%   DELIMITER ..... caractere separant chaque parametre a decoder sur
%                   une ligne
%   nPara ......... Nombre de parametre total present dans le fichier
%
% output
%   date .......... Dates - Cellule 
%   time .......... Heure - Cellule 
%   lat  .......... Latitude - Tableau de double
%   lon  .......... Longitude - Tableau de double
%   sst  .......... Temperature - Tableau de double
%   sss  .......... Salinite - Tableau de double
%   cond .......... Conductivite - Tableau de double
%   condRaw ....... Conductivite brute - tableau de chaine de caracteres
%   sog  .......... Vitesse du navire - Tableau de double
%   cog  .......... Cap du navire - Tableau de double
%
% Mofication
% 23/01/2006    Initialisation de condRaw modifié
%                        Avant      condRaw = NaN*ones(nblig, 1);
%                        Maintenant condRaw = char(blanks(1)*ones(nblig,1));
%
% -------------------------------------------------------------------

  % Le nombre d'elements de l'entete determine le nombre de chaine a lire.
  % Je cree ici la chaine de caractere decrivant le format utilise par 
  % textscan. Modifie par jg avec repmat
  % --------------------------------------------------------------
  format = repmat(' %s', 1, nPara);

  % textscan permet de lire a peu pres tout, memes les lignes 
  % incompletes, plus courtes.
  % Par contre les données lues sont enregistrees dans une
  % Cellule de cellule
  % ATTENTION :
  %   dans le cas de lignes incompletes textscan n'utilise pas
  %   enptyValue mais une chaine de caracteres vide
  % -----------------------------------------------------------
  data = textscan(fid, format, 'delimiter', DELIMITER, 'emptyValue', NaN);
  
  % Remplace les chaines de caracteres vides par des NaN
  % ----------------------------------------------------
  for icell = 1:length( data )
    vide = find( strcmp( data{icell}, '' ) == 1);
    for j = 1 : length(vide)
      data{icell}{vide(j)} = 'NaN';
    end
  end
  
  % Selectionne les numeros des lignes qui ne sont pas des entetes
  % ATTENTION
  % Je fais l'hypothese que la premiere ligne du fichier est une ligne
  % d'entete
  % ------------------------------------------------------------------
  date  = char( data{ColNo.Date} );
  ient = strcmp( data{1}, data{1}{1}  );
  ient = find(ient == 0);
  
  % Initialisation
  % --------------
  nblig = length(ient);
  date  = cell(nblig, 1);
  time  = cell(nblig, 1);
  lat   = NaN*ones(nblig, 1);
  lon   = NaN*ones(nblig, 1);
  sst   = NaN*ones(nblig, 1);
  sss   = NaN*ones(nblig, 1);
  cond  = NaN*ones(nblig, 1);
  condRaw = char(blanks(1)*ones(nblig,1));
  sog   = NaN*ones(nblig, 1);
  cog   = NaN*ones(nblig, 1);
 
  % Selection des parametres utiles au programme et conversion
  % La date et l'heure sont stockes dans des cellules
  % ----------------------------------------------------------
  if ColNo.Date ~= 0
    A = data(ColNo.Date);
    B = char( A{1}(ient) );
    date = cellstr( B );
  end 
  if ColNo.Time ~= 0
    A = data(ColNo.Time);
    B = char( A{1}(ient) );
    time = cellstr( B );
  end
  if ColNo.Lat ~=0
    % Test si latitude en degre decimal ou degre minute
    % --------------------------------------------------
    lat   = str2num( char(data{ColNo.Lat}{ient}) );
    
    % lat est vide si les latitudes sont en degres minutes.
    % Conversion en degre decimal
    % -----------------------------------------------------
    if isempty(lat)
      lat = GPStodegdec( cellstr(char(data{ColNo.Lat}{ient})) );
    end
      
  end
  
  if ColNo.Lon ~= 0
    lon   = str2num( char(data{ColNo.Lon}{ient}) );
        
    % lon est vide si les latitudes sont en degres minutes.
    % Conversion en degre decimal
    % -----------------------------------------------------
    if isempty(lon)
      lon = GPStodegdec( cellstr(char(data{ColNo.Lon}{ient})) );
    end
  end
  
  if ColNo.Temp ~= 0
    sst   = str2num( char(data{ColNo.Temp}{ient}) );
    sss   = str2num( char(data{ColNo.Sal}{ient}) );
    cond  = str2num( char(data{ColNo.Cond}{ient}) );
  end
  if ColNo.Raw ~= 0
    condRaw = char( data{ColNo.Raw}{ient} );
  end
  if ColNo.Sog ~= 0
    sog   = str2num( char(data{ColNo.Sog}{ient}) );
    cog   = str2num( char(data{ColNo.Cog}{ient}) );