IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Recherche de données qui ne sont pas entre des balises [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    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 ?

  2. #2
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    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.

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Les nouveaux fichiers News File XXXX XXXXX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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()

  4. #4
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    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.

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je ne comprends pas ta question. Ce que je t'ai proposé accepte le contenu total du fichier en entrée.

  6. #6
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Citation Envoyé par Yogui
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 = ?



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

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

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

    ?>

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    La seule chose qui manque à mon code, c'est au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Données qui ne sont pas reprises correctement
    Par Abalalojik dans le forum C#
    Réponses: 0
    Dernier message: 18/02/2014, 14h49
  2. Copier des données qui ne sont pas au même endroit
    Par nancy38 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/02/2013, 10h23
  3. Réponses: 4
    Dernier message: 30/07/2008, 13h46
  4. [AJAX] Données qui ne sont pas postées en ajax
    Par senacle dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 07/05/2008, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo