1 | #!/usr/bin/perl -c |
---|
2 | |
---|
3 | # $Id: cr_radiosondage_tvd.pl thetis $ |
---|
4 | |
---|
5 | # aa_nnnnn.ret --> tvdaammjj.hhmmxx |
---|
6 | # |
---|
7 | # règle de renommage du fichier : |
---|
8 | # ***************************** |
---|
9 | # - ouvrir en lecture le fichier issu de la décompression qui s'appelle aa_nnnnn.ret |
---|
10 | # - lire les 9 premières lignes |
---|
11 | # - lire la 10ième ligne qui commence en principe par la lettre a (minuscule) |
---|
12 | # - faire un test pour vérifier que la première est bien un a pour continuer |
---|
13 | # (boucle de test sur a pour pouvoir faire la suite) |
---|
14 | # - récupérer de cette ligne les éléments suivants : 16, 17,18,19,20. |
---|
15 | # (ils sont à chaque fois séparés par un blanc) |
---|
16 | # 16 correspond aux minutes mm |
---|
17 | # 17 correspond à l'heure hh |
---|
18 | # 18 correspond au jour jj |
---|
19 | # 19 correspond au mois mm |
---|
20 | # 20 correspond à l'année aa |
---|
21 | # Pour composer le nom définitif, il faut ABSOLUMENT que aa, mm, jj, hh, mm soient |
---|
22 | # sur 2 positions donc il faut penser à complémenter avec un 0 (zéro devant) si ce qui est lu |
---|
23 | # dans la ligne est sur une position (cf exemple). |
---|
24 | # Le nom définitif commence SYSTEMATIQUEMENT par tvd et s'écrit comme suit : |
---|
25 | # tvdaammjj.hhmmxx . |
---|
26 | # |
---|
27 | # exemple : |
---|
28 | # ******* |
---|
29 | # réception des fichiers DDU du 30/08/06, après décompression, |
---|
30 | # obtention de la liste des radiosondages suivants : |
---|
31 | # 06_16406.ret |
---|
32 | # 06_16407.ret |
---|
33 | # 06_16408.ret |
---|
34 | # 06_16409.ret |
---|
35 | # 06_16410.ret |
---|
36 | # 06_16411.ret |
---|
37 | # 06_16412.ret |
---|
38 | # 06_16413.ret |
---|
39 | # Considérons le fichier 06_16406.ret dont voici les 10 premières lignes : |
---|
40 | # 1 V 10.1 |
---|
41 | # 2 A 8/6/16413 1 5 N |
---|
42 | # 3 d 9990 9990 999 |
---|
43 | # 4 n |
---|
44 | # 5 b C:\RS\RAW\P6082823.RAW |
---|
45 | # 6 m 10.0 3 |
---|
46 | # 7 c |
---|
47 | # 8 s 3 3 |
---|
48 | # 9 t 356 |
---|
49 | #10 a 9746 -221 85 140 45 -6665 14000 3 0 40 1 1 1 1 22 23 28 8 6 15700 89642 |
---|
50 | # |
---|
51 | #les éléments 16, 17,18,19,20 sont 22 23 28 8 6 soient : |
---|
52 | # 22 pour les minutes, |
---|
53 | # 23 pour les heures, |
---|
54 | # 28 pour le jour, |
---|
55 | # 8 pour le mois (il faudra complémenter à 0), donc 08, |
---|
56 | # 6 pour l'année (il faudra complémenter à 0), donc 06. |
---|
57 | # Le nom du fichier sera donc : tvd060828.2322xx |
---|
58 | |
---|
59 | use strict; |
---|
60 | |
---|
61 | sub { |
---|
62 | my ($rda, $plugintype, $datafile, $datatype) = @_; |
---|
63 | |
---|
64 | $datafile =~ /\d\d_\d{4}\.ret$/i or return; |
---|
65 | |
---|
66 | my $archive = $rda->archive() or do { |
---|
67 | $rda->logging(4, |
---|
68 | 'Can get archive' |
---|
69 | ); |
---|
70 | return; |
---|
71 | }; |
---|
72 | |
---|
73 | my $filename = $archive->extract($datafile) or do { |
---|
74 | $rda->logging(4, |
---|
75 | "Can't get temporary file: %s", |
---|
76 | $archive->error || "", |
---|
77 | ); |
---|
78 | return(0); |
---|
79 | }; |
---|
80 | |
---|
81 | my $resopen = open(my $handle, "<", $filename); |
---|
82 | |
---|
83 | unlink($filename); |
---|
84 | |
---|
85 | if (!$resopen) { |
---|
86 | $rda->logging(4, |
---|
87 | "Can't open temp file %s", |
---|
88 | $filename, |
---|
89 | ); |
---|
90 | return(0); |
---|
91 | } |
---|
92 | |
---|
93 | |
---|
94 | # ripping 10 lines |
---|
95 | # <$handle> foreach (1..9); seems useless to read first 10 lines no ? |
---|
96 | # just search line begining by 'a' ? |
---|
97 | while (my $line = <$handle>) { |
---|
98 | $line =~ /^a / or next; |
---|
99 | chomp($line); |
---|
100 | my @val = split(/\s+/, $line); |
---|
101 | my %to_ret = (); |
---|
102 | my $idx = 15; # 16 but start at 0 |
---|
103 | foreach (qw(minute heure jour mois annee)) { |
---|
104 | $to_ret{$_} = $val[$idx]; |
---|
105 | $idx++; |
---|
106 | } |
---|
107 | return(1, %to_ret); |
---|
108 | } |
---|
109 | |
---|
110 | $rda->logging(0, "EOF of %s reached w/o having found date/time line", $datafile ); |
---|
111 | close($handle); |
---|
112 | |
---|
113 | # not found at EOF |
---|
114 | return(0); |
---|
115 | } |
---|