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
40
41
42
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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
% --------------------------------------------------------------
format = [];
for i = 1:nPara
format = [format ' %s'];
end
% 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