Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2007, 15h46   #1
Invité de passage
 
Inscription : mars 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 12
Points : 3
Points : 3
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 :
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 :
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.
Voodu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 22h49   #2
Membre éprouvé
 
Avatar de goodpz
 
Inscription : février 2007
Messages : 475
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 475
Points : 474
Points : 474
Citation:
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 :
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.
goodpz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 23h03   #3
Invité de passage
 
Inscription : mars 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 12
Points : 3
Points : 3
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
Voodu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 23h07   #4
Membre éprouvé
 
Avatar de goodpz
 
Inscription : février 2007
Messages : 475
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 475
Points : 474
Points : 474
Citation:
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 ?
goodpz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 23h28   #5
Invité de passage
 
Inscription : mars 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 12
Points : 3
Points : 3
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 :
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 !
Voodu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 23h36   #6
Membre régulier
 
Inscription : janvier 2007
Messages : 85
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 85
Points : 80
Points : 80
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.

@++
__________________
"Soyez les changements que vous aimeriez voir dans le monde" Mahatma Gandhi
p.legal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h31.


 
 
 
 
Partenaires

Hébergement Web