Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
TSG QC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
US191
TSG QC
Commits
35905a69
Commit
35905a69
authored
9 years ago
by
jacques.grelet_ird.fr
Browse files
Options
Downloads
Patches
Plain Diff
add test on date and time read from file with a regexp
rename date to theDate
parent
faa7ea52
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
tsg_io/private/decodeficlabview.m
+124
-108
124 additions, 108 deletions
tsg_io/private/decodeficlabview.m
tsg_io/readTsgDataLabview.m
+3
-3
3 additions, 3 deletions
tsg_io/readTsgDataLabview.m
with
127 additions
and
111 deletions
tsg_io/private/decodeficlabview.m
+
124
−
108
View file @
35905a69
function
[
d
ate
,
time
,
lat
,
lon
,
sst
,
sss
,
sssStd
,
cond
,
condRaw
,
sog
,
cog
,
flow
]
=
...
decodeficlabview
(
fid
,
DELIMITER
,
ColNo
,
paraName
,
nPara
)
function
[
theD
ate
,
t
heT
ime
,
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
This diff is collapsed.
Click to expand it.
tsg_io/readTsgDataLabview.m
+
3
−
3
View file @
35905a69
...
...
@@ -74,7 +74,7 @@ if fid ~= -1
% Lecture et decodage du fichier TSG LabView. En sortie
% ------------------------------------------
[
d
ate
,
time
,
lat
,
lon
,
sst
,
sss
,
sssStd
,
cond
,
TsgRaw
,
sog
,
cog
,
flow
]
=
...
[
theD
ate
,
t
heT
ime
,
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
(
d
ate
,
'NaN'
)
==
0
&
strcmp
(
time
,
'NaN'
)
==
0
);
noNaN
=
find
(
strcmp
(
theD
ate
,
'NaN'
)
==
0
&
strcmp
(
t
heT
ime
,
'NaN'
)
==
0
);
if
~
isempty
(
noNaN
)
...
...
@@ -162,7 +162,7 @@ if fid ~= -1
% -------------------------------------
blanc
=
char
(
blanks
(
1
)
*
ones
(
length
(
noNaN
),
1
));
tsg
.
DAYD
=
datenum
(
[
char
(
d
ate
(
noNaN
))
blanc
char
(
time
(
noNaN
))],
...
tsg
.
DAYD
=
datenum
(
[
char
(
theD
ate
(
noNaN
))
blanc
char
(
t
heT
ime
(
noNaN
))],
...
'dd/mm/yyyy HH:MM:SS'
);
% Save original data. If date or time are incorrect data are deleted
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment