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 PHP Discussion :

Création de lignes motif hh:mm:s [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 83
    Points : 65
    Points
    65
    Par défaut Création de lignes motif hh:mm:s
    Bonjour,

    J'ai un fichier contenant des logs mais malheureusement tous les logs sont sur une seule ligne...
    Je dois donc essayer de recréer les lignes en sachant qu'une ligne commence toujours par une heure au format hh:mm:s

    Voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00:00:0	12	14.500:00:3	34	50.023:59:3	16	76.9
    Qui devrait donner à la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    00:00:0	12	14.5
    00:00:3	34	50.0
    23:59:3	16	76.9
    Auriez-vous une solution avec la fonction preg_split par exemple?

    Merci d'avance pour vos réponses!

  2. #2
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Voici ta regex, à toi de le faire avec un preg_split

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^([0-9]{2}:[0-9]{2}:[0-9]{1}[\t][0-9]{2})([\t])([0-9]{2}[,.][0-9]{1})$
    Tu obtiendras un tableau et après une petite boucle avec un retour à la ligne en HTML ou CSS, comme tu veux
    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 83
    Points : 65
    Points
    65
    Par défaut
    Merci pour cette réponse rapide.
    Cependant ma ligne de log contient beaucoup plus de valeurs que celle présentée ici.
    Y aurait-il un moyen plus générique pour récupérer le contenu entre les heures?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hh:mm:s LE CONTENU LIGNE 1hh:mm:s LE CONTENU LIGNE 2hh:mm:s LE CONTENU LIGNE 3 ...
    J'ai bien essayé avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ([0-9]{2}:[0-9]{2}:[0-9]{1}.*?)[0-9]{2}:[0-9]{2}:[0-9]{1}
    Mais il ne me récupère que la première occurrence (même si j'utilise un preg_match_all)

  4. #4
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Tout a fait, c'est possible, suffit de demander

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^([0-9]{2}:[0-9]{2}:[0-9]{1,2})(.*)$
    Je vais t'expliquer un peu en détails comme ça tu devrais t'en sortir :

    ^ Indique le début de la chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ([0-9]{2}:[0-9]{2}:[0-9]{1,2})(.*)
    Un chiffre entre 0 et 9 répété deux fois : [0-9]{2} (corresponde à tes h)
    Deux points : :
    Un chiffre entre 0 et 9 répété deux fois : [0-9]{2} (corresponde à tes m)
    Deux points : :
    Un chiffre entre 0 et 9 répété mini 1 fois et maxi 2 fois : [0-9]{1,2} (corresponde à tes s)
    N'importe quel chaine de caractère : (.*)

    $ Indique la fin de la chaine

    Normalement avec ça tu devrais t'en sortir
    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est du csv donc utilise fgetcsv, avec comme séparateur une tabulation

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 83
    Points : 65
    Points
    65
    Par défaut
    Je suis désolé je dois vraiment être incapable...

    Merci pour les explications très utiles.
    J'ai donc bien essayé de mettre cette expression et voici ce que j'obtiens:

    Array (
    [0] => Array (
    [0] => 00:00:1 LE CONTENU LIGNE 123:58:1 LE CONTENU LIGNE 223:59:1 LE CONTENU LIGNE 3 )
    [1] => Array (
    [0] => 00:00:1 )
    [2] => Array (
    [0] => LE CONTENU LIGNE 123:58:1 LE CONTENU LIGNE 223:59:1 LE CONTENU LIGNE 3 )
    )

    Je ne comprends pas bien pourquoi il ne prend pas aussi les autres heures.

    @stealth35:
    J'ai bien pensé à utiliser ceci mais comme ma dernière valeur d'une ligne est collée à mon heure de la ligne suivante, je ne peux donc pas récupérer la dernière valeur pour chaque ligne.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    t'es sur que y'as pas de saut de ligne ? tu l'ouvres avec quoi ton fichier ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 83
    Points : 65
    Points
    65
    Par défaut
    Oui oui certain (notepad++). Le problème c'est que la personne qui a créé le template qui gère ces logs a oublié de mettre un saut de ligne à la fin du template...

    Mais grâce à ta remarque j'ai trouvé une solution:

    Remplacer toutes les heures par "retour de ligne"+heure.
    Ceci implique de devoir en premier parser tout le fichier pour le réécrire proprement dans un nouveau. Je vais devoir faire quelques tests de performance mais ca devrait fonctionner.

    L'expression que je vais utiliser sera donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0-9]{2}:[0-9]{2}:[0-9]{1}
    Merci à vous deux en tout cas!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/12/2009, 11h13
  2. création de ligne auto
    Par zebulon94 dans le forum Excel
    Réponses: 1
    Dernier message: 07/08/2009, 23h30
  3. Macro création de ligne suivant colonne
    Par mik388 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/05/2008, 21h06
  4. Réponses: 3
    Dernier message: 17/07/2006, 13h50
  5. Création de ligne d'un tableay dynamiquement
    Par wehtam dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/04/2006, 13h05

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