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

Langage Perl Discussion :

convertir l'heure avec strftime


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Août 2007
    Messages : 147
    Par défaut convertir l'heure avec strftime
    Bonjour,
    J'essais de changer la date (epoch) par celle plus lisible en année-mois-date heure... d'un fichier log!
    Le fichier log se présente ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [1289775600] CURRENT SERVICE STATE: ups1;sys battery temperature;OK;HARD;
    Pour ce faire j'ai fait un petit script dont le fichier ups1.log est passer en lecture et pour chaque valeur
    entre quote il me convertit l'heure avec strftime.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/perl -w                                                                
    use strict;
    use POSIX qw(strftime);
     
    open FILE, "ups1.log" or die $!;
     
    while (<FILE>) {
    	$_ =~ s/^\[\d+\]/strftime ('%Y-%m-%d %H:%M:%S' localtime($1))/;
    	print $_;
    }
    Mais cela ne fonctionne pas et j'obtiens la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strftime ('%Y-%m-%d %H:%M:%S' localtime()) HOST FLAPPING ALERT:...
    Où est le problème?

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    J'aime bien scinder le code en plusieurs lignes. C'est toujours plus simple à le relecture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    use strict;
    use warnings;
    use POSIX qw(strftime);
     
    open FILE, '<', "ups1.log" or die $!;
    while (my $ligne = <FILE>) {
    	my ($time) = $ligne =~ m/^\[(\d+)\]/;
      print strftime('%Y-%m-%d %H:%M:%S', localtime($time)) if ($time);
    }
    close(FILE);

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Sinon, tu peux tout à fait réaliser cette opération dans la regexp, mais il faut ajouter l'option /e, penser à capturer la date dans le motif, et mettre une virgule entre les arguments de strftime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s/^\[(\d+)\]/strftime ('%Y-%m-%d %H:%M:%S', localtime($1))/e;

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Sinon, tu peux tout à fait réaliser cette opération dans la regexp, mais il faut ajouter l'option /e, penser à capturer la date dans le motif, et mettre une virgule entre les arguments de strftime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s/^\[(\d+)\]/strftime ('%Y-%m-%d %H:%M:%S', localtime($1))/e;
    J'aime bien également cette écriture, mais pour les débutants, ce n'est pas toujours très compréhensible au début à comprendre.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Cela dit, c'est simplement la correction de celle que nymus7 avait écrit...

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Cela dit, c'est simplement la correction de celle que nymus7 avait écrit...
    c'est sûr

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

Discussions similaires

  1. Afficher l'heure locale avec strftime
    Par cheprod dans le forum C
    Réponses: 5
    Dernier message: 22/07/2008, 12h16
  2. probleme date et heure avec mysql.
    Par argon dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/07/2005, 22h42
  3. [PHP]problème avec strftime()...
    Par sanosuke85 dans le forum Langage
    Réponses: 5
    Dernier message: 26/05/2005, 10h02
  4. Comment convertir une heure (TDateTime) locale en UTC/GMT
    Par rconty dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/05/2005, 10h49
  5. Réponses: 3
    Dernier message: 13/08/2004, 18h52

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