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 :

Découper un texte [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 122
    Points
    3 122
    Par défaut Découper un texte
    Bonjour,

    J'ai un texte dans lequel il y a un ou plusieurs blocs de texte délimités par des chaines de caractère commençant par par un pattern bien précis. Par exemple:

    AZERT:__01 etc.
    premier bloc
    AZERT:__05 etc.
    second bloc
    AZERT:__0A etc.

    Et là, je bloque un peu sur la meilleure façon de retrouver les blocs de textes ainsi délimités.
    J'ai d'abord pensé à faire un explode, puis à parser chaque ligne du tableau en regardant pour chacune si elle commence par le pattern cherché mais ça me parait un peu lourd.
    J'ai aussi pensé à lire le texte ligne par ligne et à ajouter chaque ligne dans une autre chaine tant que je ne trouve pas le pattern suivant. Là aussi, ça me parait un lourd comme méthode.

    Et vous, vous feriez ça comment ?

    Papy !

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Les expressions régulières/rationnelles servent à cela ;-)
    http://fr.php.net/preg-match-all

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 122
    Points
    3 122
    Par défaut
    Je viens d'essayer le code suivant mais ça ne donne pas les résultats escomptés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $file = file_get_contents("exemple1.txt");
    $key = "------=_NextPart";
    if (preg_match_all('#'.$key.'\s*#', $file, $tablo)) {
    var_dump($tablo);
    }
    Mon fichier est un mail au format raw, d'où l'utilisation du NextPart pour retrouver les différentes parties du mail. Dans mon cas, ça me renvoie:

    array(1) {
    [0]=>
    array(3) {
    [0]=>
    string(16) "------=_NextPart"
    [1]=>
    string(16) "------=_NextPart"
    [2]=>
    string(16) "------=_NextPart"
    }
    }

    Alors, ok ça me renvoie 3 chaînes mais pas vraiment ce que je veux . Moi j'ai besoin de récupérer ce qui est entre les lignes qui commencent par ce pattern.

    Comme je suis nul en expressions régulières, je pense que ce que j'ai écris est totalement inadapté.

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 122
    Points
    3 122
    Par défaut
    avec un split, ça donne un peu plus ce queje cherche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $file = file_get_contents("exemple1.txt");
    $key = "------=_NextPart";
    $t = preg_split('#'.$key.'\s*#', $file);
    var_dump($t);
    ça me donne un tableau pour lesquels je peux virer simplement la première ligne pour avoir le bloc recherché dans chaque élément du tableau.

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 122
    Points
    3 122
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Les expressions régulières/rationnelles servent à cela ;-)
    http://fr.php.net/preg-match-all
    J'oubliais: merci

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

Discussions similaires

  1. découper un texte a la fin d'une phare
    Par gotcha5832 dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2011, 15h14
  2. Découper un texte
    Par javass dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 02/04/2010, 10h04
  3. découper un texte pour en faire plusieurs enregistrements
    Par moulinmax dans le forum VBA Access
    Réponses: 12
    Dernier message: 17/12/2008, 20h26
  4. [Tableaux] Découper un texte tous les 40 lignes
    Par TooKool dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2008, 15h11
  5. Fonction pour découper un texte
    Par zenaz dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2007, 00h42

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