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

Petit nouveau ! | 2 Messages

05 déc. 2010, 01:19

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.

devlop78
Invité n'ayant pas de compte PHPfrance

05 déc. 2010, 03:01

Je changerais la date en secondes par rapport à UNIX, je soustrairerais, et ça donnerait la différence en secondes.

Petit nouveau ! | 2 Messages

05 déc. 2010, 08:58

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

Eléphanteau du PHP | 21 Messages

05 déc. 2010, 10:35

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;

ViPHP
ViPHP | 5462 Messages

05 déc. 2010, 18:48

tu peux t'orienter par la : vos-contributions/manipuler-simplement- ... 55918.html
ca sera plus simple pour manipuler tes requêtes