Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
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 19/06/2007, 17h56   #1
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Par défaut Recherche de données qui ne sont pas entre des balises

J'ai deux fichier de log, ces log sont créer grâce à Robocopy pour le serveur Windows et Rsync pour le linux.

Le but du jeu, d'avoir une page PHP qui scan les logs et faire un rapport des transfert.

Pour robocopy j'aimerais récupérer :
Les nouveaux fichiers News File XXXX XXXXX
Les fichiers ou dossiers qui provoque une erreur. XXXX/XX/XX XX:XX:XX ERROR X (XxXXXXXXXX) XXX-XXX REPERTOIRE/DOSSIER
La fin du log Après les -------------

Pour Rsync
Les fichiers uploadé Les fichiers qui ont un "XXXX XX%"
La fin du log Après "sent"

Récupérer des données entre balise ou ligne par ligne je sait faire, mais la le nombre de ligne peut être énorme en fonction du nombre de fichier.
http://www.libellules.ch/dotclear/in...urs-a-la-ligne

Ca me fait pas mal de regexp ?
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2007, 10h22   #2
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
ne fais pas une regex par ligne
fait une regex avec preg_match_all en utilisant les assertions ^ et $ avec l'option (apres la fermeture de ton délimiteur) m.
Le ^ voudra dire début de ligne et $ fin de ligne.
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 15h30   #3
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Citation:
Les nouveaux fichiers News File XXXX XXXXX
Code :
1
2
3
4
5
6
7
8
if(preg_match_all('/^new file\s+([0-9]+)\s+(.*)$/mi', $logContents, $matches, PREG_SET_ORDER))
{
   foreach($matches as $newFile)
   {
      list($fulMatch, $fileSize, $fileName) = $newFile;
      // Utiliser $fileSize et $fileName
   }
}
Quelque chose comme cela te convient ?


[Edit] Pour les fins de log, tu t'en sortiras avec substr() et strrpos()
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2007, 16h16   #4
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Je doit je parcourir le fichier de log ligne par ligne, et vérifier la présence de ce que je cherche ?

5000 lignes à parcourir pour lancer 3 tests de recherche de chaine de caractère ne vous dérange ppas trop ?

ok.
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2007, 16h19   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Je ne comprends pas ta question. Ce que je t'ai proposé accepte le contenu total du fichier en entrée.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 17h43   #6
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Citation:
Envoyé par Yogui
Salut
Code :
1
2
3
4
5
6
7
8
if(preg_match_all('/^new file\s+([0-9]+)\s+(.*)$/mi', $logContents, $matches, PREG_SET_ORDER))
{
   foreach($matches as $newFile)
   {
      list($fulMatch, $fileSize, $fileName) = $newFile;
      // Utiliser $fileSize et $fileName
   }
}
J'ai un peu de mal à décrypter.

Ton code parcours seul le fichier, ou je doit utliser
$fileSize = Taille du fichier
$fileName = Nom du fichier ou chemin du fichier ?
$logContents = ?
$matches = ?



Citation:
<?php
                  $fichier_ouvert 
fopen($fichier_cible,"w");      // Ecriture du fichier
      
                  
$fp fopen($chemin,'r'); //lecture du fichier
                  
while (!feof($fp))
                  {
                        
$ligne fgets($fp4096);             // lecture du contenu de la ligne
                        // ####################
                        //             TON CODE
                        // ####################

                  
}
                  
                  
//$pointeur = ftell($fichier_ouvert);            // Placement du pointeur
                  //fwrite($fichier_ouvert,$fichier);            // Ecrire du texte

                  
fclose($fichier_ouvert);            // Fermeture du fichier en écriture

?>
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 18h03   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
La seule chose qui manque à mon code, c'est au début :
Code :
$logContents = file_get_contents('fichier.log');
Si tu lis la documentation de la fonction preg_match_all(), tu comprendras que $matches est une variable en entrée-sortie.
Lis également la doc de list() pour savoir d'où viennent $fileSize et $fileName.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui 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 22h22.


 
 
 
 
Partenaires

Hébergement Web