|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 75 ![]() |
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 :
00:00:0 12 14.500:00:3 34 50.023:59:3 16 76.9 Code :
Merci d'avance pour vos réponses! |
||
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() ![]() Développeur Web Inscription : juin 2009 Messages : 363 ![]() |
Voici ta regex, à toi de le faire avec un preg_split
Code :
^([0-9]{2}:[0-9]{2}:[0-9]{1}[\t][0-9]{2})([\t])([0-9]{2}[,.][0-9]{1})$ |
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 75 ![]() |
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 :
hh:mm:s LE CONTENU LIGNE 1hh:mm:s LE CONTENU LIGNE 2hh:mm:s LE CONTENU LIGNE 3 ...
Code :
([0-9]{2}:[0-9]{2}:[0-9]{1}.*?)[0-9]{2}:[0-9]{2}:[0-9]{1} |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() ![]() Développeur Web Inscription : juin 2009 Messages : 363 ![]() |
Tout a fait, c'est possible, suffit de demander
Je vais t'expliquer un peu en détails comme ça tu devrais t'en sortir : ^ Indique le début de la chaine. 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 |
|
00
|
|
|
#5 |
![]() ![]() Inscription : septembre 2010 Messages : 7 219 ![]() |
c'est du csv donc utilise fgetcsv, avec comme séparateur une tabulation
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 75 ![]() |
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. |
|
|
00
|
|
|
#7 |
![]() ![]() Inscription : septembre 2010 Messages : 7 219 ![]() |
t'es sur que y'as pas de saut de ligne ? tu l'ouvres avec quoi ton fichier ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 75 ![]() |
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: Merci à vous deux en tout cas! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com