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 :

Supprimer le contenu qui se trouve entre deux délimiteurs [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Supprimer le contenu qui se trouve entre deux délimiteurs
    Yop,

    Je souhaite parser un fichier texte, pour être plus précis j'aimerai pouvoir supprimer des lignes se trouvant entre deux "délimiteurs".

    Exemple :

    Si la variable $domaine est égal à domaine.com alors on supprime la partie suivante du fichier texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Debut domaine.com
    zone "domaine.com" {
            type master;
            file "domaine.com";
            notify yes;
    };
    //Fin domaine.com
    (Le fichier à parser est named.conf pour les connaisseurs).

    Ou //Debut domaine.com et //Fin domaine.com sont les deux délimiteurs.

    Donc je vais y aller à coups de fopen, file_get_contents et d'expressions régulières mais je ne sais pas comment lui indiquer la marche à suivre. :/

    Voila, si une personnes pouvait me mettre sur le chemin ça serait sympa.
    Merci.

  2. #2
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Tu parcouriras le fichier texte ligne par ligne (est-ce que tes valeurs sont lignes par lignes ?) (file_get_contents)

    Jusqu'à la fin (feof)

    Et ligne par ligne, tu applique ton expression régulière (preg_match)

    La fonction preg_match affecte le résultat de ce qu'il trouve selon un "masque", dans un tableau.....

    Pour plus d'info sur l'utilisation elles-même des fonctions présentés, un pitit tour sur php.net !!! (ou voir ma signature : c'est toujours bon d'avoir un CHM sur soi.... )
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Ouai les valeurs sont lignes par lignes mais type master; notify yes; et }; se répétent à chaque ajouts de zones (je ne sais pas si ça va poser un problème).

    Donc ce que je souhaite faire est tout à fait possible ?

    Merci de ta réponse.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Je bloque au niveau du preg_match, je ne vois pas ce que tu as voulu dire par "ligne par ligne".
    Pour le moment j'ouvre le fichier, je fais une boucle qui va tester la fin du fichier mais après je sèche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    // On ouvre le fichier en lecture/écriture.
    $fichier = fopen('./named.conf', 'r+');
     
    // On test la fin du fichier, une fois la fin atteinte la boucle s'arrête.
    while (!feof($fichier)) {
     
    ?>
    Je suis allé jetter un oeil à la doc mais celle-ci ne me parle pas des masses, pour le moment l'idée que j'ai en tête est d'utiliser preg_replace.

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace('/\szone\s"domaine.com"\s\{.\};\s/sU', "\n", $str);

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Yop,

    Désolé du délai de réponse mais je ne m'étais pas repenché sur problème depuis.

    Voici le code, cependant le fichier est modifié (date) mais pas le contenu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    $fichier = './named.conf';
    $domaine = 'domaine.com';
     
    $content = file_get_contents($fichier);
    $content = preg_replace("#zone $domaine \{(.+)\};#isU", "\n", $content);
     
    $handle = fopen($fichier, 'wb');
    fwrite($handle, $content);
    fclose($handle);
     
    ?>
    J'ai essayé avec avec l'expression du dessus mais même résultat.
    Merci de votre aide.

  7. #7
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, tu peux essayer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $file    = './named.conf';
    $domaine = 'domaine.com';
    $content = file_get_contents($file);
    $content = preg_replace('`//Debut ' . $domaine . '\r.*//Fin ' . $domaine . '`smU', '', $content);
    if(file_put_contents($file, $content) === false) {
    	echo 'erreur !!!';
    }
    ?>
    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Merci de ta réponse mais hélas j'ai toujours le même problème, le fichier semble être modifier mais j'ai toujours le contenu qui est censé disparaître.

    Je n'ai vraiment aucune idée du problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <php
     
    $fichier = './named.conf';
    $domaine = 'google.fr';
     
    $content = file_get_contents($fichier);
     
    $content = preg_replace('`//Debut ' . $domaine . '\r.*//Fin ' . $domaine . '`smU', '', $content);
    if(file_put_contents($fichier, $content) === false) {
    	echo 'erreur !!!';
    }
     
    ?>
    Voici le fichier à parser :

    //Debut google.fr
    zone "google.fr" {
    type master;
    file "google.fr";
    notify yes;
    };
    //Fin google.fr

    //Debut google.com
    zone "google.com" {
    type master;
    file "google.com";
    notify yes;
    };
    //Fin google.com
    Je n'ai même pas le message erreur !!! qui s'affiche donc c'est qu'il n'y a pas d'erreur dans le script.
    J'ai bien un chmod 777 sur le fichier.

    D'autres idées ?
    Merci

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Oki, c'est bon j'ai trouvé la toute petite erreur.
    L'expression qui fonctionne est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $content = preg_replace('`//Debut ' . $domaine . '.*//Fin ' . $domaine . '`smU', '', $content);
    Et non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $content = preg_replace('`//Debut ' . $domaine . '\r.*//Fin ' . $domaine . '`smU', '', $content);
    Le \r est coupable !!
    Merci Nesmontou

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

Discussions similaires

  1. Supprimer ce qui se trouve entre deux signets
    Par Tintou dans le forum VBA Word
    Réponses: 3
    Dernier message: 29/06/2017, 10h32
  2. Supprimer le contenu entre deux délimiteurs
    Par patrmich dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/12/2013, 19h24
  3. Sauver le contenu d'un panel entre deux exécutions
    Par Raphael77222 dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 29/05/2008, 11h27
  4. variable de session qui se vide entre deux pages
    Par mnem0 dans le forum Langage
    Réponses: 6
    Dernier message: 21/11/2007, 15h53
  5. [RegEx] Vérifier si une chaîne se trouve entre deux balises ?
    Par symbolyk dans le forum Langage
    Réponses: 2
    Dernier message: 03/02/2007, 18h37

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