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}) ); end if ColNo.Sal ~= 0 sss = str2num( char(data{ColNo.Sal}{ient}) ); end if ColNo.Cond ~= 0 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}) ); end if ColNo.Cog ~= 0 cog = str2num( char(data{ColNo.Cog}{ient}) ); end