source: obsdata/trunk/ourplugins/cr_radiosondage_tvd.pl @ 298

Last change on this file since 298 was 298, checked in by nanardon, 18 years ago
  • add a debug message if EOF reached
File size: 3.2 KB
Line 
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
59use strict;
60
61sub {
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}
Note: See TracBrowser for help on using the repository browser.