IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

formatage d'un script Perl


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Par défaut formatage d'un script Perl
    Bonjour,

    Je dois alimenter quotidiennement une base de données avec les infos d’un fichier log.

    Pour cela je désire :
    -ouvrir un fichier log
    -récupérer les différentes informations ligne par ligne
    -formater ces infos (date, heure, timeticks)
    -l’envoyer dans une base de données
    -------------------------------------------------------------------
    -renommer le fichier avec la date de la veille
    -déplacer ce fichier renommé dans un autre dossier
    -et enfin créer un nouveau fichier log dans lequel viendront s’ajouter les nouvelles infos.

    Pour l’instant, le script est censé fonctionner jusqu’à l’envoi dans la base de données (je ferai le reste après ^^).

    Ceci étant ma première programmation en Perl, je souhaiterais savoir si le code, les librairies, etc sont corrects.

    Je vous remercie énormément.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/usr/bin/perl -w
    use strict;
    use DBI;
    use CGI;
    use POSIX;
     
    my $cgi = new CGI;
    my ($dateHeure,$adIp,$numGeneric,$numSpecific,$sysTime,$trap);
    my ($date,$heure);
    my ($annee,$mois,$jour);
    my ($hour,$min,$sec);
    my $timestamp;
     
    open FICHIER,"< /var/log/snmptrapfmt.log"
        or die "Le fichier snmptrapfmt n'existe pas ! : $!\n";
     
    #Connection à la base de données mysql NomDeBase
    my $db = DBI -> connect (("dbi:mysql:dbname=NomDeBase;host=localhost;","root","******"))
                    or die "connection impossible!";
     
    while ($ligne = <FICHIER>){
    # récupération des éléments
     ($dateHeure,$adIp,$numGeneric,$numSpecific,$sysTime,$trap) = split /;/,$ligne;
     
    #formatage de l'heure 
     ($date,$heure) = split /./,$dateHeure;
     ($annee,$mois,$jour) = $date =~ m{(\d{4})(\d{2})(\d{2})};
     $date = $annee."-".$mois."-".$jour;
     ($hour,$min,$sec) = $heure =~ m{(\d{4})(\d{2})(\d{2})};
     $heure = $hour.":".$min.":".$sec;
     $dateHeure = $date." ".$heure;
     $timestamp = mktime($sec,$min,$hour,$jour,$mois,$annee );
     
     
    #formatage du timeticks
    $sysTime = $timestamp - $sysTime;
    $sysTime = UnixDate(ParseDate("epoch $sysTime"), '%Y-%m-%d %H:%M:%S');
     
    # et on insere dans la base
      $db->do("insert into NomTable values ('$dateHeure', '$adIp', '$numGeneric', '$numSpecific', '$sysTime', '$trap')");
              or die "pb de requete : $DBI::errstr";
    }# fin de traitement de fichier
    close FICHIER;

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Par défaut
    Lorsque j'ai voulu executer le script (sur debian), je me suis retrouver avec une suite d'erreur. Pour le coup, j'ai fais l'essai sans la base de donné.

    Il semblerai que le opérateur m, ne divise pas les chiffres ou qu'il ne les enregistre pas dans les variables.

    merci de votre aide. Par ailleurs, j'ai apporté une modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     ($annee,$mois,$jour,$hour,$min,$sec) = $dateHeure =~ m{(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})};
     $dateHeure = $annee."-".$mois."-".$jour." ".$hour.":".$min.":".$sec;

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Par défaut
    Bonjour,
    A/ Ton code est plutôt bien, je n'aurais pas tout écris comme ça mais c'est plus une question de goût que de clarté ou de précision.

    B/ Le code suivant marche bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $dateHeure = "20091212060708";
    ($annee,$mois,$jour,$hour,$min,$sec) = $dateHeure =~ m{(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})};
    $dateHeure = $annee."-".$mois."-".$jour." ".$hour.":".$min.":".$sec;
    print $dateHeure;
    Ton problème vient surement du format de données en entrée, pas de tes instructions Perl pour récupérer la date car elles sont correctes.

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Par défaut
    en effet, le format de départ n'était pas bon : "YYYYMMDD.HHMMSS". Donc j'ai modifié le code et il marche. Voici ma solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my @array = split(/\./,$date);
    my ($annee, $mois, $jour) = $array[0] =~ m{(\d{4})(\d{2})(\d{2})};
    my ($heure, $min, $sec) = $array[1] =~ m{(\d{2})(\d{2})(\d{2})};
    $date = $annee."-".$mois."-".$jour." ".$heure.":".$min.":".$sec;
    Merci pour ton aide 50Nio. Sinon, tu as dis que tu en l'aurai pas codé ainsi. Puis je connaître ta solution?

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Par défaut
    Parfait ! (pense au bouton résolu )

    Sinon, j'aurais écrit le même algo exactement,
    c'est juste les split je les aurait écrit avec des parenthèses,
    et aussi j'aurais regroupé les déclaration my avec des commentaires pour expliciter l'utilisation de chaque "famille " de variable.
    Après, c'est purement des changements esthétiques et mineur.

    Un autre changement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     my @array = split(/\./,$date);
     my ($annee, $mois, $jour) = $array[0] =~ m{(\d{4})(\d{2})(\d{2})};
     my () = $array[1] =~ m{(\d{2})(\d{2})(\d{2})};
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my ($annee, $mois, $jour, $heure, $min, $sec) = $date =~ m{(\d{4})(\d{2})(\d{2})\.(\d{2})(\d{2})(\d{2})}

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Par défaut
    Merci beaucoup pour l'aide.

    Sinon, c'est vrai, je n'ai pas commenté mon programme. Mais bon, je commence tous juste avec perl donc je veux déjà saisir la synthaxe à utiliser. Par la suite, je commenterai.

    je vais continuer le programme. merci de l'aide.

    P.S : j'avais déjà mis résolu ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/07/2004, 14h47
  2. [langage] Script Perl Aide
    Par julfra dans le forum Langage
    Réponses: 7
    Dernier message: 17/05/2004, 09h55
  3. [langage] script perl cmd system
    Par kacedda dans le forum Langage
    Réponses: 4
    Dernier message: 02/05/2003, 09h45
  4. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26
  5. Réponses: 2
    Dernier message: 11/07/2002, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo