Skip to content
Snippets Groups Projects
Commit 35905a69 authored by jacques.grelet_ird.fr's avatar jacques.grelet_ird.fr
Browse files

add test on date and time read from file with a regexp

rename date to theDate
parent faa7ea52
No related branches found
No related tags found
No related merge requests found
function [date, time, lat, lon, sst, sss, sssStd, cond, condRaw, sog, cog, flow] =...
decodeficlabview( fid, DELIMITER, ColNo, paraName, nPara )
function [theDate, theTime, lat, lon, sst, sss, sssStd, cond, condRaw, sog, cog, flow] =...
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
%
......@@ -17,8 +17,8 @@ function [date, time, lat, lon, sst, sss, sssStd, cond, condRaw, sog, cog, flow]
% nPara ......... Nombre de parametre total present dans le fichier
%
% output
% date .......... Dates - Cellule
% time .......... Heure - Cellule
% date .......... Dates - Cellule
% time .......... Heure - Cellule
% lat .......... Latitude - Tableau de double
% lon .......... Longitude - Tableau de double
% sst .......... Temperature - Tableau de double
......@@ -39,115 +39,131 @@ function [date, time, lat, lon, sst, sss, sssStd, cond, condRaw, sog, cog, flow]
% Focntions appelees : GPStodegdec
% -------------------------------------------------------------------
% 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
% --------------------------------------------------------------
theFormat = repmat(' %s', 1, nPara);
% 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
% --------------------------------------------------------------
theFormat = 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, theFormat, '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);
sssStd = 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);
flow = 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 );
% 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, theFormat, '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
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
% 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
% ------------------------------------------------------------------
theDate = char( data{ColNo.Date} );
ient = strcmp( data{1}, data{1}{1} );
ient = find(ient == 0);
% Initialisation
% --------------
nblig = length(ient);
theDate = cell(nblig, 1);
theTime = cell(nblig, 1);
lat = NaN*ones(nblig, 1);
lon = NaN*ones(nblig, 1);
sst = NaN*ones(nblig, 1);
sss = NaN*ones(nblig, 1);
sssStd = 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);
flow = 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) );
% test if string is date
exp = '(\d+/\d+/\d+)';
match = regexp(A{1}(ient), exp, 'ONCE');
theDate = cellstr( B );
for i=1 : nblig
if isempty(match{i})
theDate{i} = 'NaN';
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
if ColNo.Time ~= 0
A = data(ColNo.Time);
B = char( A{1}(ient) );
% test if string is time
exp = '(\d+:\d+:\d+)';
match = regexp(A{1}(ient), exp, 'ONCE');
theTime = cellstr( B );
for i=1 : nblig
if isempty(match{i})
theTime{i} = 'NaN';
end
end
end
if ColNo.Lat ~=0
% Test si latitude en degre decimal ou degre minute
% --------------------------------------------------
lat = str2num( char(data{ColNo.Lat}{ient}) );
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.SalStd ~= 0
sssStd = str2num( char(data{ColNo.SalStd}{ient}) );
end
if ColNo.Cond ~= 0
cond = str2num( char(data{ColNo.Cond}{ient}) );
end
if ColNo.Raw ~= 0
condRaw = char( data{ColNo.Raw}{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
if ColNo.Sog ~= 0
sog = str2num( char(data{ColNo.Sog}{ient}) );
end
if ColNo.Cog ~= 0
cog = str2num( char(data{ColNo.Cog}{ient}) );
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
if ColNo.AD1 ~= 0
flow = str2num( char(data{ColNo.AD1}{ient}) );
end
\ No newline at end of file
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.SalStd ~= 0
sssStd = str2num( char(data{ColNo.SalStd}{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
if ColNo.AD1 ~= 0
flow = str2num( char(data{ColNo.AD1}{ient}) );
end
\ No newline at end of file
......@@ -74,7 +74,7 @@ if fid ~= -1
% Lecture et decodage du fichier TSG LabView. En sortie
% ------------------------------------------
[date, time, lat, lon, sst, sss, sssStd, cond, TsgRaw, sog, cog, flow] =...
[theDate, theTime, lat, lon, sst, sss, sssStd, cond, TsgRaw, sog, cog, flow] =...
decodeficlabview( fid, DELIMITER, ColNo, paraName, nPara );
% Nombre de lignes du fichier
......@@ -154,7 +154,7 @@ if fid ~= -1
% Indices where dates and hours are correct (no NaN)
% --------------------------------------------------
noNaN = find( strcmp( date, 'NaN') == 0 & strcmp( time, 'NaN') == 0 );
noNaN = find( strcmp( theDate, 'NaN') == 0 & strcmp( theTime, 'NaN') == 0 );
if ~isempty( noNaN )
......@@ -162,7 +162,7 @@ if fid ~= -1
% -------------------------------------
blanc = char( blanks(1) * ones(length(noNaN),1));
tsg.DAYD = datenum( [char(date(noNaN)) blanc char(time(noNaN))],...
tsg.DAYD = datenum( [char(theDate(noNaN)) blanc char(theTime(noNaN))],...
'dd/mm/yyyy HH:MM:SS');
% Save original data. If date or time are incorrect data are deleted
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment