Page 1 sur 1

récupéré le nombre de ligne entre 2 occurrences

Posté : 05 déc. 2010, 01:19
par mackguil
Bonjour

Je débute en PHP et cherche a compter le nombre de ligne entre 2 occurence dans un fichier log en TXT.

Je m'explique.

Voici mon log

26/11/2010 23:09:07~!~Event Trigger~!~Delayed Trigger A6 Off (hall detecteur)
26/11/2010 23:09:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:10:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:10:57~!~Event Trigger~!~Value change trigger (temperature serre hors gel on):serre milieu from: 250 to: 238 C14 On (serre radiateur) , C15 On (serre lampadaire paille)26/11/2010 23:09:07~!~Event Trigger~!~Delayed Trigger A6 Off (hall detecteur)
26/11/2010 23:09:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:10:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:10:57~!~Event Trigger~!~Value change trigger (temperature serre hors gel on):serre milieu from: 250 to: 238 C14 On (serre radiateur) , C15 On (serre lampadaire paille)
26/11/2010 23:11:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:12:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:13:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:13:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 238 to: 394 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:14:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:15:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:15:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 394 to: 463 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:16:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:17:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:18:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:18:57~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 463 to: 369 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:19:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:20:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:20:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 369 to: 325 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:21:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:22:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:22:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 325 to: 294 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:23:57~!~Event Trigger~!~Recurring Trigger (drive space)
26/11/2010 23:23:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:11:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:12:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:13:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:13:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 238 to: 394 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:14:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:15:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:15:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 394 to: 463 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:16:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:17:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:18:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:18:57~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 463 to: 369 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:19:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:20:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:20:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 369 to: 325 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:21:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:22:57~!~Event Trigger~!~Recurring Trigger (nolive)
26/11/2010 23:22:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 325 to: 294 C14 Off (serre radiateur) , C15 Off (serre lampadaire paille)
26/11/2010 23:23:57~!~Event Trigger~!~Recurring Trigger (drive space)
26/11/2010 23:23:57~!~Event Trigger~!~Recurring Trigger (nolive)

En fait je voudrais connaitre le temps que fonctionne un chauffage dasn une serre pour calculer ma consommation.

Pour se faire je pense compter le temps entre une ligne qui contient

26/11/2010 23:10:57~!~Event Trigger~!~Value change trigger (temperature serre hors gel on):serre milieu from: 250 to:

et la ligne qui affiche le off après le on

26/11/2010 23:13:58~!~Event Trigger~!~Value change trigger (temperature serre hors gel off):serre milieu from: 238 to

Voici le code que j'ai afin d'ouvrir le le fichier log et de recupéré une valeur

Code : Tout sélectionner

<?php $i=0; $element_liste = "~!~Event Trigger~!~Value change trigger (temperature serre hors gel on):serre milieu from:"; $fichier = fopen("C:/Program Files/HomeSeer/ah.log", "r"); if ($fichier) //si la lecture s'est bien déroulée { //tanqu'on est pas à la fin du fichier while (!feof($fichier)) { $ligne = fgets($fichier, 4096); //lit ligne par ligne 4096 octets if(strstr($ligne, $element_liste)) { $resultat[$i] = $ligne; $i++; } } fclose($fichier); } //j'affiche #for($i=0; $i<count($resultat); $i++) echo "<B> Le chauffage de la serre a fonctionné $i minute depuis le 4 12/2010 : </B>"; # echo "<B>Résultat numéro $i : </B>".$resultat[$i]."<br/>"; ?>
Par contre je ne comprend pas comment faire pour comparer l'heure de démarrage d'une ligne on et l'heure d’extinction d'une ligne off dans le log et calculer le temps écoulé, additionne le tout afin d'obtenir le temps de fonctionnement.

Si vous avez des pistes, merci

PS: j'ai cherché 15 jours afin de trouver le bout de code plus haut.

Re: récupéré le nombre de ligne entre 2 occurrences

Posté : 05 déc. 2010, 03:01
par devlop78
Je changerais la date en secondes par rapport à UNIX, je soustrairerais, et ça donnerait la différence en secondes.

Re: récupéré le nombre de ligne entre 2 occurrences

Posté : 05 déc. 2010, 08:58
par mackguil
Je changerais la date en secondes par rapport à UNIX, je soustrairerais, et ça donnerait la différence en secondes.
Bonjour

Quelle fonction dois je utiliser pour faire la soustraction ?

Et quelle fonction pour récupérer l'heure dans une ligne?

Comment changer l'heure en seconde?

Merci

Re: récupéré le nombre de ligne entre 2 occurrences

Posté : 05 déc. 2010, 10:35
par joanel26
Salut pour soustraire deux date le plus simple est les convertir en timestamp

Pour passer une date en timestamp voir la fonction : mktime()
Pour passe d'un timestamp à une date : date("Y-m-d H:i:s", $timestamp)

Pour récupérer l'heure et la date rien de plus simple, tu utilise la fonction substr() (sous-chaine) qui te permet d'isoler des sous-chaines de caractères

Voila un bon de code que j'ai dans mes archives ça pourrait t'aider pour les date et comprendre la fonction substr()

Code : Tout sélectionner

$actu = mktime(); $timestamp = mktime(23, 59, 59, 11, 23, 1999); $convertion = date('Y-m-d H:i:s', $ladate); $ldate = substr($convertion,8,2).'-'.substr($convertion,5,2).'-'.substr($convertion,0,4); $heure = substr($convertion,11,2).':'.substr($convertion,14,2); $difference = $actu-$timestamp;

Re: récupéré le nombre de ligne entre 2 occurrences

Posté : 05 déc. 2010, 18:48
par stealth35
tu peux t'orienter par la : vos-contributions/manipuler-simplement- ... 55918.html
ca sera plus simple pour manipuler tes requêtes