Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2011, 09h40   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
Par défaut Traitement d'un fichier log

Bonjour,

J'ai un fichier log organisé dans cette forme (ce sont des événements détaillés entre les accolades) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[6007] = 
    {
        type = "shot",
        place = "",
        initiator = "New Vehicle Group #33",
        initiatorID = 16812544,
        t = 65502.983,
        failure = "",
        weapon = "M185_155",
    }, -- end of [6007]
    [6008] = 
    {
        place = "Senaki-Kolkhi",
        type = "takeoff",
        initiatorPilotName = "Crossbow",
        initiator = "US CAS 1.1",
        initiatorID = 16822272,
        t = 65509.22,
        failure = "",
        weapon = "",
    }, -- end of [6008]
    [6009] = 
    {
        place = "Senaki-Kolkhi",
        type = "land",
        initiatorPilotName = "Crossbow",
        initiator = "US CAS 1.1",
        initiatorID = 16822272,
        t = 65526.66,
        failure = "",
        weapon = "",
    }, -- end of [6009]
L'idée est de ne récupérer que les événements créés par des utilisateurs (indiqué par le critère "initiatorPilotName"), soit ces données :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   [6008] = 
    {
        place = "Senaki-Kolkhi",
        type = "takeoff",
        initiatorPilotName = "Crossbow",
        initiator = "US CAS 1.1",
        initiatorID = 16822272,
        t = 65509.22,
        failure = "",
        weapon = "",
    }, -- end of [6008]
    [6009] = 
    {
        place = "Senaki-Kolkhi",
        type = "land",
        initiatorPilotName = "Crossbow",
        initiator = "US CAS 1.1",
        initiatorID = 16822272,
        t = 65526.66,
        failure = "",
        weapon = "",
    }, -- end of [6009]
J'ai tenté différentes approches notamment avec file_get_contents() pour récupérer l'ensemble du fichier dans une seule chaine et définir des explodes, mais ça ne fonctionne pas.

Auriez-vous une idée de l'approche à tenté pour récupérer uniquement les données (place, type, initiatorPilotName, initiator, initiatorID, t, failure, weapon) liés à l'objet initiatorPilotName dans cette structure ? (j'ai pensé à insérer les caractères entre les lignes [****] = et }, -- end of [****] dans un même élément de tableau, mais je vois pas comment coder ça)

Cordialement,
Beniti
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 11h15   #2
Membre Expert
 
Avatar de David Guillot
 
Homme David Guillot
Chef de projet en SSII
Inscription : mars 2004
Messages : 879
Détails du profil
Informations personnelles :
Nom : Homme David Guillot
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2004
Messages : 879
Points : 1 149
Points : 1 149


Est-ce que la structure de ton fichier de log est un peu modifiable ? Parce qu'en un rien de temps, tu peux le transformer en JSON, qu'ensuite tu interprètes super facilement en PHP.

Dans le cas contraire, tu devras te taper des RegExp...
__________________
Avant de poser une question ici :

Après résolution de votre question : un clic sur , un et un vote pour les personnes qui vous ont aidé
David Guillot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 14h14   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 41
Points : 4
Points : 4
Salut,

Merci pour la réponse
Finalement j'ai trouvé une solution avec file_get_contents un split et des conditions contenant des strstr pour récupérer uniquement les morceaux qui m’intéressent.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
	function openlog() {
 
		$openlog = file_get_contents("debrief.log");
 
		$logs = split('[{}]', $openlog);
 
		foreach ($logs as $result) {
			if (strstr($result, 'initiatorPilotName') && !strstr($result, '"shot"')) {
				$datas .= $result.'<br /> <hr /> <br />';
			}
		}
 
		return $datas;
 
	}
A+
Beniti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h18.


 
 
 
 
Partenaires

Hébergement Web