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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 émérite
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    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 averti
    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
    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 averti
    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
    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 expérimenté
    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 : 38
    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
    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 averti
    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
    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.

+ 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, 11h32
  2. Supprimer le contenu entre deux délimiteurs
    Par patrmich dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/12/2013, 20h24
  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, 12h27
  4. variable de session qui se vide entre deux pages
    Par mnem0 dans le forum Langage
    Réponses: 6
    Dernier message: 21/11/2007, 16h53
  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, 19h37

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