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 :

Prélever une chaine de caractères avec contraintes


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Prélever une chaine de caractères avec contraintes
    Bonjour,

    Je souhaite découper une chaine de caractères. Mais j'ai quelques contraintes qui me donnent du fil à retordre...

    A la base, j'ai un fichier texte qui contient des données stockées sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BALISE1
    Et le texte qui va bien
    BALISE2
    Un second paragraphe
    BALISE3
    Et puis ça continue
    Je souhaite récupérer les données qui sont entre les balises. Un petit coup de strtok pour séparer la première partie jusqu'à BALISE2 puis ereg_replace pour l'effacer, puis on continue jusqu'à la fin. C'est laborieux mais ça fonctionne.

    Le hic, c'est que cette structure est susceptible d'évoluer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    BALISE1
    Et le texte qui va bien
    BALISE_QUI_NE_M_INTERRESSE_PAS
    Le texte non plus d'ailleurs
    BALISE2
    Un second paragraphe
    BALISE3
    Et puis ça continue
    Donc, en gros, est il possible, à la manière XML, de récupérer le texte de la BALISE2 par exemple, sans le connaitre, d'un coup d'un seul et à coup sûr ?

    Merci à vous.

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Donc, en gros, est il possible, à la manière XML, de récupérer le texte de la BALISE2 par exemple, sans le connaitre, d'un coup d'un seul et à coup sûr ?
    Si tu connais 'BALISE2' et 'BALISE3', alors oui, c'est assez facile de récupérer le text qui t'intéresse. Je suppose que les BALISEN sont seuls sur leur propre ligne. Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match('/^BALISE2$(.+?)^BALISE3/sm', $str, $a);
    echo $a[1];
    Par contre, si tu ne connais pas par avance l'élément qui délimite la fin du paragraphe souhaité et qu'il n'y a pas d'heuristique pour reconnaître les BALISEs, alors il va falloir revoir le format de ta chaîne car on ne sera pas capable d'isoler les paragraphes recherchés.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par goodpz
    Par contre, si tu ne connais pas par avance l'élément qui délimite la fin du paragraphe souhaité et qu'il n'y a pas d'heuristique pour reconnaître les BALISEs, alors il va falloir revoir le format de ta chaîne car on ne sera pas capable d'isoler les paragraphes recherchés.
    Effectivement... Cette chaine provient de l'export de données d'un logiciel : je ne peux pas modifier le balisage. J'ai simplement le choix entre ce type de formatage, et de l'ascii délimité. La structuration des données étant susceptible d'évoluer, que ce soit dans un cas comme dans l'autre, je me trouve coincé!

    Ce n'est donc pas à ce niveau que je vais pouvoir résoudre ce problème.

    Merci pour ton éclairage

  4. #4
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Cette chaine provient de l'export de données d'un logiciel
    Alors il y a quand même des chances que le format soit un minimum structuré...
    As tu les spécifications du format d'export ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par goodpz
    Alors il y a quand même des chances que le format soit un minimum structuré...
    As tu les spécifications du format d'export ?

    A vrai dire, c'est très limité. Les specs sont aussi minimales que celles décrites dans mon premier post.

    Mais je viens de m'apercevoir que j'ai une piste supplémentaire. En ascii délimité, je peux avoir ce type de format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom_champ1*nom_champ2* (...) *nom_champn@fiche1_champ1* (...) *fiche1_champn@fiche2_champ1* (...) *fiche2_champn (...)
    Ainsi, avant d'avoir la totalité des fiches séparées par des '@' par ex, avec leurs attributs délimités par des '*' ; je peux exporter la structure avec le nom des différents champs.

    Il me suffirait alors de numéroter la position de chaque champ recherché, puis d'aller le chercher dans chaque fiche.

    A voir !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Points : 87
    Points
    87
    Par défaut
    As tu absolument besoin de traiter cet export via un serveur ? As tu pensé à travailler en local via une mini application ? cela devrait être plus simple à gerer en local.

    @++

Discussions similaires

  1. remplacer une chaine de caractères avec sed
    Par salseropom dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 15/05/2007, 14h56
  2. Comment concaténer une chaine de caractères avec un espace ?
    Par blanchonvincent dans le forum MATLAB
    Réponses: 6
    Dernier message: 07/04/2007, 21h53
  3. Dégradé sur une chaine de caractères avec 3 a 4 couleurs
    Par avogadro dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/03/2006, 13h21
  4. Lecture d'une chaine de caractère avec fgets
    Par mayoouketchup dans le forum Langage
    Réponses: 9
    Dernier message: 22/12/2005, 16h17
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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