Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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);
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
% 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}) );