PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > nzn.fr.delphi > [TRegExpr] Un peu d'aide pour son utilisation dans une boucle
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
[TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Réponse
 
LinkBack Outils de la discussion
Vieux 17/01/2008, 03h38   #1
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bonjour à tous,

Est-ce quelqu'un pourrait m'aider à créer la boucle utilisant les
expressions régulières pour extraire
du texte se situant entre les chaines :
<br><br>x.
où x est un nombre variable suivi d'un point.

Mon texte ressemble à ceci :

<br><br>1. ceci est le texte un. il peut y avoir des , ; : ? etc... et tout
autres caractères<br><br>2. ceci
est mon deuxieme texte idem pour les caractères<br><br>3. ceci est mon
troiseme texte etc...

Vous l'aurez compris, mon texte peut contenir n'importe quel caractères
excepté biensûr la chaine séparatrice.

J'aimerais un boucle du style :

R.Expression := '????' <== Là c'est à vous de m'aider
While S:=R.Exec(sMonTexte) and s<>'' do
showmessage(S);

En fait je ne sais pas d'ailleurs comment utiliser les ExprReg pour extraire
les sous chaines ??

D'avance merci pour votre aide, dans l'attente de vous lire
Amicalement,
Bruno


  Réponse avec citation
Vieux 17/01/2008, 13h27   #2
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bruno Mannina a écrit :
> Bonjour à tous,
>
> Est-ce quelqu'un pourrait m'aider à créer la boucle utilisant les
> expressions régulières pour extraire
> du texte se situant entre les chaines :
> <br><br>x.
> où x est un nombre variable suivi d'un point.
>
> Mon texte ressemble à ceci :
>
> <br><br>1. ceci est le texte un. il peut y avoir des , ; : ? etc... et tout
> autres caractères<br><br>2. ceci
> est mon deuxieme texte idem pour les caractères<br><br>3. ceci est mon
> troiseme texte etc...
>
> Vous l'aurez compris, mon texte peut contenir n'importe quel caractères
> excepté biensûr la chaine séparatrice.
>
> J'aimerais un boucle du style :
>
> R.Expression := '????' <== Là c'est à vous de m'aider
> While S:=R.Exec(sMonTexte) and s<>'' do
> showmessage(S);
>
> En fait je ne sais pas d'ailleurs comment utiliser les ExprReg pour extraire
> les sous chaines ??
>
> D'avance merci pour votre aide, dans l'attente de vous lire
> Amicalement,
> Bruno
>
>


Bonjour,

Est-ce que l'usage d'une expression régulière est imposée ?
Vu la simplicité de la balise, je pense qu'il est bien plus rapide de parcourir
la chaine à sa recherche et d'extraire les sous chaines à la volée.

Par exemple (écrit en ligne, non testé)

Procedure ExtraitInfos(Const Source:String; Dest:TStringList);
Const Balise:String = '<br><br>';
Var PDeb,PFin:PChar;
S:String;
Begin
PFin:=PChar(Source);
PDeb:=Nil;
//Cherche première balise
While (PFin^<>#0) and (StrLIComp(PFin,PChar(Balise),Length(Balise))<>0) do
Inc(PFin);
If PFin^=#0 then Exit; //Aucune balise trouvée
Inc(PFin, Length(Balise)); //Saute la balise
PDeb:=PFin; //Marque début chaine à garder

//Cherche balise suivante et extrait chaine depuis la précédente
Repeat
While (PFin^<>#0) and (StrLIComp(PFin,PChar(Balise),Length(Balise))<>0) do
Inc(PFin);
If PFin^=#0 then Break;

SetString(S, PDeb, PFin-PDeb);
Dest.Add(S);
Inc(PFin, Length(Balise)); //Saute la balise
PDeb:=PFin;
until False;

//Si souhaité : accepte la dernière chaine non fermée
If Assigned(PDeb) then
begin
SetString(S, PDeb, PFin-PDeb);
Dest.Add(S);
End;
End;
  Réponse avec citation
Vieux 17/01/2008, 15h45   #3
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Salut Pascal,

En fait c'est parce que il y a le x variable.
Est-ce que ton code prend en compte le fait que x varie de 1 à 999 ?

la balise est : <br><br>x. il y a aussi un point aprés le x


Dans l'attente de te lire,
Cordialement,
Bruno

"Pascal Peyremorte" <p.peyremorte_oter_ces_mots@free.fr> a écrit dans le
message de news: fmoigk$aa3$1@sd-6498.dedibox.fr...
> Bruno Mannina a écrit :
>> Bonjour à tous,
>>
>> Est-ce quelqu'un pourrait m'aider à créer la boucle utilisant les
>> expressions régulières pour extraire
>> du texte se situant entre les chaines :
>> <br><br>x.
>> où x est un nombre variable suivi d'un point.
>>
>> Mon texte ressemble à ceci :
>>
>> <br><br>1. ceci est le texte un. il peut y avoir des , ; : ? etc... et
>> tout autres caractères<br><br>2. ceci
>> est mon deuxieme texte idem pour les caractères<br><br>3. ceci est mon
>> troiseme texte etc...
>>
>> Vous l'aurez compris, mon texte peut contenir n'importe quel caractères
>> excepté biensûr la chaine séparatrice.
>>
>> J'aimerais un boucle du style :
>>
>> R.Expression := '????' <== Là c'est à vous de m'aider
>> While S:=R.Exec(sMonTexte) and s<>'' do
>> showmessage(S);
>>
>> En fait je ne sais pas d'ailleurs comment utiliser les ExprReg pour
>> extraire les sous chaines ??
>>
>> D'avance merci pour votre aide, dans l'attente de vous lire
>> Amicalement,
>> Bruno

>
> Bonjour,
>
> Est-ce que l'usage d'une expression régulière est imposée ?
> Vu la simplicité de la balise, je pense qu'il est bien plus rapide de
> parcourir la chaine à sa recherche et d'extraire les sous chaines à la
> volée.
>
> Par exemple (écrit en ligne, non testé)
>
> Procedure ExtraitInfos(Const Source:String; Dest:TStringList);
> Const Balise:String = '<br><br>';
> Var PDeb,PFin:PChar;
> S:String;
> Begin
> PFin:=PChar(Source);
> PDeb:=Nil;
> //Cherche première balise
> While (PFin^<>#0) and (StrLIComp(PFin,PChar(Balise),Length(Balise))<>0)
> do
> Inc(PFin);
> If PFin^=#0 then Exit; //Aucune balise trouvée
> Inc(PFin, Length(Balise)); //Saute la balise
> PDeb:=PFin; //Marque début chaine à garder
>
> //Cherche balise suivante et extrait chaine depuis la précédente
> Repeat
> While (PFin^<>#0) and
> (StrLIComp(PFin,PChar(Balise),Length(Balise))<>0) do
> Inc(PFin);
> If PFin^=#0 then Break;
>
> SetString(S, PDeb, PFin-PDeb);
> Dest.Add(S);
> Inc(PFin, Length(Balise)); //Saute la balise
> PDeb:=PFin;
> until False;
>
> //Si souhaité : accepte la dernière chaine non fermée
> If Assigned(PDeb) then
> begin
> SetString(S, PDeb, PFin-PDeb);
> Dest.Add(S);
> End;
> End;



  Réponse avec citation
Vieux 17/01/2008, 20h34   #4
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bruno Mannina a écrit :
> Salut Pascal,
>
> En fait c'est parce que il y a le x variable.
> Est-ce que ton code prend en compte le fait que x varie de 1 à 999 ?
>
> la balise est : <br><br>x. il y a aussi un point aprés le x


Non. J'avais cru que le "N." faisait partie du texte à récupérer.

Si <br><br> n'apparait jamais dans le texte, il peut servir de balise et il
suffit d'éliminer les caractères numériques et le point qui suivent.

Sinon, ce n'est pas difficile de vérifier la présence de'un entier suivit d'un
point après les doubles <br>. Par exemple en remplaçant les deux appels à
(StrLiComp(...)= 0 par une petite fonction.

  Réponse avec citation
Vieux 17/01/2008, 21h06   #5
JJM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Salut,

une Expression régulière toute bête comme ci dessous te permet de trouver la
chaine complete
<br><br>\d{1,3}\.

il suffit ensuite d'extraire les nombre
\d{1,3}\.

Le plus simple est d'utiliser deux objets TRegExpr, un pour la recherche
l'autre pour l'extraction

Amicalement
JJM


  Réponse avec citation
Vieux 18/01/2008, 02h40   #6
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Re-Bonjour,

alors voilà avec cette expression régulière :
const
RE = '<br><br>\d{1,2}\.(.+?)<br><br>\d{1,2}\.';

j'obtiens une extraction sur deux, car le résultat de ma premiere extraction
posséde le tag de debut de la deuxieme prhrase à extraire
et donc, seul al troisième est vu. hum... je sais pas si j'ai été clair.
Enfin je veux juste dire que en résultat j'ai

<br><br>1. kldsjflksjdlkfsjdlkfjsdf<br><br>2.
<br><br>3. qskllqksdkljqlksdjlqksjdlkqjslk<br><br>4.
<br><br>5. etc...
etc...

Comment faire pour que mon expression régulière ne prenne pas le debut des
prochaines chaines à Extraire ?

Pour info, voici mon bout de code:
s := sPhrase;
R := TRegExpr.Create;
Try
R.Expression := RE;
if r.Exec (s) then
REPEAT
showmessage(R.match[0]);
UNTIL not R.ExecNext;
Finally
R.Free;
End;

Dans l'attente de vous lire,
Amicalement,
Bruno

"Bruno Mannina" <bmannina@free.fr> a écrit dans le message de news:
fmmij3$4dh$1@sd-6498.dedibox.fr...
> Bonjour à tous,
>
> Est-ce quelqu'un pourrait m'aider à créer la boucle utilisant les
> expressions régulières pour extraire
> du texte se situant entre les chaines :
> <br><br>x.
> où x est un nombre variable suivi d'un point.
>
> Mon texte ressemble à ceci :
>
> <br><br>1. ceci est le texte un. il peut y avoir des , ; : ? etc... et
> tout autres caractères<br><br>2. ceci
> est mon deuxieme texte idem pour les caractères<br><br>3. ceci est mon
> troiseme texte etc...
>
> Vous l'aurez compris, mon texte peut contenir n'importe quel caractères
> excepté biensûr la chaine séparatrice.
>
> J'aimerais un boucle du style :
>
> R.Expression := '????' <== Là c'est à vous de m'aider
> While S:=R.Exec(sMonTexte) and s<>'' do
> showmessage(S);
>
> En fait je ne sais pas d'ailleurs comment utiliser les ExprReg pour
> extraire les sous chaines ??
>
> D'avance merci pour votre aide, dans l'attente de vous lire
> Amicalement,
> Bruno
>



  Réponse avec citation
Vieux 18/01/2008, 10h34   #7
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

JJM a écrit :
> Salut,
>
> une Expression régulière toute bête comme ci dessous te permet de trouver la
> chaine complete
> <br><br>\d{1,3}\.
>
> il suffit ensuite d'extraire les nombre
> \d{1,3}\.
>
> Le plus simple est d'utiliser deux objets TRegExpr, un pour la recherche
> l'autre pour l'extraction
>
> Amicalement
> JJM



Bonjour

Plus simple, probablement, mais côté efficacité ?

Les expressions régulières impliquent une interprétation de l'expression, et vu
la simplicité de sa balise, je suis plus porté par une recherche directe, d'où
ma proposition - volontairement incomplète : il faut bien lui laisser un bout à
faire, sinon il va s'ennuyer.

Bien-sûr, s'il n'a que quelques instances à retrouver, on se fiche de la
rapidité et des ressources consommées.

Pour la curiosité (je n'ai pas manipulé les unités d'expréssions régulières en
Delphi), l'équivalent de ma procédure (lecture dans une chaine et remplissage
d'un TSrings) ressemblerait à quoi avec les fonctions d'expressions régulières ?
(pour comparer avec ma proposition)
  Réponse avec citation
Vieux 18/01/2008, 12h02   #8
JJM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle


> Plus simple, probablement, mais côté efficacité ?


C'est clairement moins efficace :-)
Mais tellement plus simple et générique..

> (pour comparer avec ma proposition)


Il est possible de faire une méthode d'extraction chaine / souchaine du
genre (ps c'est plus ou moins du pseudo code non vérifié..)

function ExtractEr(Const TheText, aEr, aSubEr : String) : TStrings;
Var
MyRegExpr1 := TRegExpr;
MyRegExpr2 := TRegExpr;
MyResult := TStrings;

Procedure AddResult(Const Founded : String);
begin
MyRegExpr2.Text := Founded;
if Not MyRegExpr2.Pos(0) then Exit;
MyResult.Add(MyRegExpr2.Match[0]);
While MyRegExpr2.Next do
begin
MyResult.Add(MyRegExpr2.Match[0]);
end;
end;

begin
MyResult := TStrings.Create;
MyRegExpr1 := TRegExpr.create;
MyRegExpr2 := TRegExpr.create;
Try
MyRegExpr2 := Expr := aSubEr
MyRegExpr1.Text := ThText;
MyRegExpr1.Expr := aEr;
While True do
begin
if Not MyRegExpr1.Pos(0) then break;
AddResult(MyRegExpr1.Match[0]);
While MyRegExpr1.Next do
begin
AddResult(MyRegExpr1.Match[0]);
end;
end
Result := MyResult;
finally
MyRegExpr1.free;
MyRegExpr2.free;
end;
end;

Amicalement
JJM


  Réponse avec citation
Vieux 18/01/2008, 12h06   #9
JJM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Pardon, bonjour, :-)

Le pseudo code possède une erreur importante :-)

> if Not MyRegExpr1.Pos(0) then break;


C'est pas 0 mais I initialisé à 0 au départ et avec la i := Position+1
ensuite , sans quoi ca va boucler à plein tube :-)

Amicalement,
JJM


  Réponse avec citation
Vieux 18/01/2008, 12h29   #10
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

"JJM" <jjm@pasDeSpamSvp-Delphicenter.net> a écrit dans le message de news:
fmpddh$2ju$1@sd-6498.dedibox.fr...
> Salut,
>
> une Expression régulière toute bête comme ci dessous te permet de trouver
> la chaine complete
> <br><br>\d{1,3}\.


Hélas non car avec cette ER je ne trouve que :
<br><br>1.
<br><br>2.
<br><br>3.
<br><br>4.

etc... mais pas le texte qui suit.

A moins biensur que j'ai loupé quelque chose ?!

Amicalement,
Bruno


  Réponse avec citation
Vieux 18/01/2008, 12h34   #11
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

"Pascal Peyremorte" <p.peyremorte_oter_ces_mots@free.fr> a écrit dans le
message de news: fmpbi1$s3g$2@sd-6498.dedibox.fr...
> Bruno Mannina a écrit :
>> Salut Pascal,
>>
>> En fait c'est parce que il y a le x variable.
>> Est-ce que ton code prend en compte le fait que x varie de 1 à 999 ?
>>
>> la balise est : <br><br>x. il y a aussi un point aprés le x

>
> Non. J'avais cru que le "N." faisait partie du texte à récupérer.


Ok, pas de soucis,

> Si <br><br> n'apparait jamais dans le texte, il peut servir de balise et
> il suffit d'éliminer les caractères numériques et le point qui suivent.

Hélas, je ne peux pas me servir de cette théorie, sinon j'aurai tout
simplement remplacer
<br><br> par une autre chaine contenant un debut et un fin de balise.


> Sinon, ce n'est pas difficile de vérifier la présence de'un entier suivit
> d'un point après les doubles <br>. Par exemple en remplaçant les deux
> appels à (StrLiComp(...)= 0 par une petite fonction.
>

Oui effectivement.

Amicalement,
Bruno


  Réponse avec citation
Vieux 18/01/2008, 13h32   #12
JJM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

> Hélas non car avec cette ER je ne trouve que :
> etc... mais pas le texte qui suit.


Il faut la compléter en fonction de ce que tu cherches.. et la balise de fin

Amicalement
JJM


  Réponse avec citation
Vieux 18/01/2008, 15h06   #13
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bruno Mannina a écrit :
> "Pascal Peyremorte" <p.peyremorte_oter_ces_mots@free.fr> a écrit dans le
>> Sinon, ce n'est pas difficile de vérifier la présence de'un entier suivit
>> d'un point après les doubles <br>. Par exemple en remplaçant les deux
>> appels à (StrLiComp(...)= 0 par une petite fonction.
>>

> Oui effectivement.


Je suis surpris que cette approche décourage autant.
Elle fait peur ?
:-)

C'est pourtant de loin la plus rapide !
Encore mieux optimisée (qui fera plus rapide ?),
ça ressemblerait à :

Procedure ExtraitInfos(Const Source:String; Dest:TStringList);
Const Balise:String = '<br><br>';
Var PDeb,PFin : PChar; //Debut et fin de texte à garder
PLec:PChar; //Lecture de la chaine
S:String; //Chaine extraite

Function IsBalise:Boolean;
Var PSauve:PChar;
Begin
Result:=StrLIComp(PLec,PChar(Balise),Length(Balise ))<>0;
If Result then
Begin //Partie fixe balise trouvée
PFin:=PLec; //Pointe début balise=fin texte précédent
Inc(PLec, Length(Balise)); //Saute la balise fixe
While PLec^ in ['0'..'9'] do Inc(PLec); //Saute nombre
Result:= (PLec^='.'); //Vérifie présence du point
If Result then
Inc(PLec); //Saute le point
End;
End;

Begin
PDeb:=Nil;
PLec :=PChar(Source);

//Cherche première balise
While Not IsBalise do
Begin
If PLec^=#0 then Exit; //Aucune balise trouvée
Inc(PLec);
End;
PDeb:=PLec; //Pointe début chaine à garder

//Cherche balises suivante
While PLec^<>#0 do
Begin
If IsBalise then
Begin //extrait chaine depuis la précédente
SetString(S, PDeb, PFin-PDeb);
Dest.Add(S);
PDeb:=PLec; //Pointe nouveau début
End
else
Inc(PLec);
End;

//Si souhaité : accepte la dernière chaine non fermée
If Assigned(PDeb) then
begin
SetString(S, PDeb, PLec-PDeb);
Dest.Add(S);
End;
End;
  Réponse avec citation
Vieux 18/01/2008, 15h18   #14
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bruno Mannina a écrit :
> Re-Bonjour,
>
> alors voilà avec cette expression régulière :
> const
> RE = '<br><br>\d{1,2}\.(.+?)<br><br>\d{1,2}\.';
>
> j'obtiens une extraction sur deux, car le résultat de ma premiere extraction
> posséde le tag de debut de la deuxieme prhrase à extraire
> et donc, seul al troisième est vu. hum... je sais pas si j'ai été clair.
> Enfin je veux juste dire que en résultat j'ai
>
> <br><br>1. kldsjflksjdlkfsjdlkfjsdf<br><br>2.
> <br><br>3. qskllqksdkljqlksdjlqksjdlkqjslk<br><br>4.
> <br><br>5. etc...
> etc...
>
> Comment faire pour que mon expression régulière ne prenne pas le début des
> prochaines chaines à Extraire ?


Salut,

Je ne connais pas assez les expressions régulières pour savoir s'il est possible
d'y inclure une partie qui doit être présente mais qui ne sera pas retournée, et
surtout qui ne fera pas avancer le pointeur de recherche...

Si ce n'est pas possible, la seule solution est d'inclure dans l'expression une
seule balise, et récupérer "à la main" le texte entre les balises.
Ce n'est plus l'expression trouvée (la balise elle même) qui est importante,
mais son emplacement en tant que séparateur.
  Réponse avec citation
Vieux 18/01/2008, 15h22   #15
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Pascal Peyremorte a écrit :
> Var PSauve:PChar;


Oubli.
Ne sert à rien.
Peut être supprimé.
(Ca fait désordre !)
  Réponse avec citation
Vieux 18/01/2008, 15h30   #16
Pierre Y.
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bruno Mannina a couché sur son écran :
> Bonjour à tous,
>
> Est-ce quelqu'un pourrait m'aider à créer la boucle utilisant les expressions
> régulières pour extraire
> du texte se situant entre les chaines :
> <br><br>x.
> où x est un nombre variable suivi d'un point.
>
> Mon texte ressemble à ceci :
>
> <br><br>1. ceci est le texte un. il peut y avoir des , ; : ? etc... et tout
> autres caractères<br><br>2. ceci
> est mon deuxieme texte idem pour les caractères<br><br>3. ceci est mon
> troiseme texte etc...
>
> Vous l'aurez compris, mon texte peut contenir n'importe quel caractères
> excepté biensûr la chaine séparatrice.
>
> J'aimerais un boucle du style :
>
> R.Expression := '????' <== Là c'est à vous de m'aider
> While S:=R.Exec(sMonTexte) and s<>'' do
> showmessage(S);
>
> En fait je ne sais pas d'ailleurs comment utiliser les ExprReg pour extraire
> les sous chaines ??
>
> D'avance merci pour votre aide, dans l'attente de vous lire
> Amicalement,
> Bruno


Sinon, il est possible d'utiliser un parser HTML disposant de
sélecteurs CSS 3 et de lire les noeuds texte correspondant à un pattern
d'imbrication de noeuds :

Avec prototype.js (javascript) ca donnerait :

mesNoeuds = $$('br + br ')

(+ est le sélecteur de noeuds qui sont au même niveau d'imbrication)

Chouette non ?

--
Pierre Y.


  Réponse avec citation
Vieux 18/01/2008, 18h14   #17
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

"JJM" <jjm@pasDeSpamSvp-Delphicenter.net> a écrit dans le message de news:
fmq9pp$apj$1@sd-6498.dedibox.fr...
>> Hélas non car avec cette ER je ne trouve que :
>> etc... mais pas le texte qui suit.

>
> Il faut la compléter en fonction de ce que tu cherches.. et la balise de
> fin
>
> Amicalement
> JJM

Justement je veux tout ce qui se trouve apres la balise de début (toute
sorte de caractère)
et sans prendre la balise de fin. C'est bien là le problème.

Amicalement,
Bruno


  Réponse avec citation
Vieux 19/01/2008, 00h10   #18
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

"Pascal Peyremorte" <p.peyremorte_oter_ces_mots@free.fr> a écrit dans le
message de news: fmqg7d$fun$2@sd-6498.dedibox.fr...
> Pascal Peyremorte a écrit :
>> Var PSauve:PChar;

>
> Oubli.
> Ne sert à rien.
> Peut être supprimé.
> (Ca fait désordre !)


Salut Pascal,

Merci pour ton code source mais hélas chez moi cela ne fonctionne pas du
tout avec mon fichier exemple, en fait il sort
un peu n'importe quoi, il ne trouve meme pas la deuxieme balise qui est
pourtant tres simple <br><br>2.

j'ai mis en fichier join ce que j'utilise pour mon test.

Merci encore pour ton aide,
Amicalement,
Bruno




  Réponse avec citation
Vieux 19/01/2008, 00h13   #19
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

> Sinon, il est possible d'utiliser un parser HTML disposant de sélecteurs
> CSS 3 et de lire les noeuds texte correspondant à un pattern d'imbrication
> de noeuds :
>
> Avec prototype.js (javascript) ca donnerait :
>
> mesNoeuds = $$('br + br ')
>
> (+ est le sélecteur de noeuds qui sont au même niveau d'imbrication)
>
> Chouette non ?


Je doute qu'avec ce type d'utilisation on puisse tenir compte de la partie
variable qui dans le texte et non dans un attribut.
Mais comme je ne connais pas hélas...

Cependant merci pour cette nouvelle piste.

Amicalement,
Bruno


  Réponse avec citation
Vieux 19/01/2008, 15h29   #20
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bruno Mannina a écrit :
> Salut Pascal,
>
> Merci pour ton code source mais hélas chez moi cela ne fonctionne pas du
> tout avec mon fichier exemple, en fait il sort


Bonjour,

* 2 minutes pour créer un nouveau projet et y mettre :
1 bouton,
1 open dialog
1 memo pour charger le fichier avec LoadFromFile
1 listbox pour mettre le résultat
+ copie de la routine que j'avais posté

* 2 minutes pour voir que :
- le premier PDeb=Nil ne sert plus à rien (reporté par delphi),
- il faut remplacer <>0 par =0 dans la première ligne de la sous
procédure (pardi !)
et ça donne :


C'est bien gentil de demander "un peu d'aide", mais fais l'effort de
chercher un peu, quand même !
Bon, je veux bien faire ton programme entièrement, mais je le facture à
qui ?
:-)

Pascal

  Réponse avec citation
Vieux 19/01/2008, 16h58   #21
Pierre Y.
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bruno Mannina a écrit :
>> Sinon, il est possible d'utiliser un parser HTML disposant de sélecteurs
>> CSS 3 et de lire les noeuds texte correspondant à un pattern d'imbrication
>> de noeuds :
>>
>> Avec prototype.js (javascript) ca donnerait :
>>
>> mesNoeuds = $$('br + br ')
>>
>> (+ est le sélecteur de noeuds qui sont au même niveau d'imbrication)
>>
>> Chouette non ?

>
> Je doute qu'avec ce type d'utilisation on puisse tenir compte de la partie
> variable qui dans le texte et non dans un attribut.


Ce genre de préjugé moi ça me motive ;-)

Voilà la version ruby + HPricot un parser [X]HTML qui dispose d'un
excellent support des sélecteurs CSS 3 et d'un opérateur "/" vachement
mignon :

Ceci est le script intégral qui réalise exactement ce que tu veux :

#!/bin/env ruby
require 'hpricot'

doc = Hpricot.parse(File.read("EP0714663.html"))
(doc/"br + br + *").each do |n|
puts n.to_s.strip
end

Output (sur STDOUT) :

1. Use for the manufacture of a medicament for potentiating the action
of a first component chosen from the group consisting of citalopram,
fluvoxamine and paroxetine in increasing the availability of serotonin,
norepinephrine and dopamine in the brain, of a combination of a first
component and a second component chosen from the group consisting of
alprenolol, WAY 100135, WAY 100635, spiperone, pindolol, (S)-UH-301,
penbutolol, propranolol, tertatolol, and a compound of the formula
2. A use of claim 1 wherein the first component is citalopram.
3. A use of claim 1 wherein the first component is fluvoxamine.
4. A use of claim 1 wherein the first component is paroxetine.
5. A use of any one of claims 1-4 wherein the second component is chosen
from the group consisting of pindolol, penbutolol, propranolol,
tertatolol, and 4-(2-hydroxy-3-cyclohexylaminopropoxy)indole.
6. Use for the manufacture of a medicament for treating a pathological
condition which is created by or is dependent upon decreased
availability of serotonin, norepinephrine or dopamine, of a first
component chosen from the group consisting of citalopram, fluvoxamine
and paroxetine, in combination with a second component chosen from the
group consisting of alprenolol, WAY 100135, WAY 100635, spiperone,
pindolol, (S)-UH-301, penbutolol, propranolol, tertatolol, and a
compound of the formula
7. A use of claim 6 wherein the pathological condition is depression.
8. A use of claim 6 wherein the pathological condition is obsessive
compulsive disease.
9. A use of any one of claims 6-8 wherein the second component is chosen
from the group consisting of pindolol, penbutolol, propranolol,
tertatolol, and 4-(2-hydroxy-3-cyclohexylaminopropoxy)indole.
10.A pharmaceutical composition which comprises a first component chosen
from the group consisting of citalopram, fluvoxamine and paroxetine in
combination with a second component chosen from the group consisting of
alprenolol, WAY 100135, WAY 100635, spiperone, pindolol, (S)-UH-301,
penbutolol, propranolol, tertatolol, and a compound of the formula
11. A composition of claim 10 wherein the second component is chosen
from the group consisting of pindolol, penbutolol, propranolol,
tertatolol and 4-(2-hydroxy-3-cyclohexylaminopropoxy)indole.

Bon courage tout de même, @+

--
Pierre Y.
KeyID : 0x7890CFE9
Viadéo : http://www.viadeo.com/invitationpers...221mij222775qk
  Réponse avec citation
Vieux 20/01/2008, 16h55   #22
Bruno Mannina
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Salut Pascal,

C'est vrai j'ai honte, j'aurai pu faire au moins l'effort d'analyser ton prog si gentiment posté. Je m'en excuse encore.
Autre chose qui m'a fait zapper un petit peu ton prog c'est que j'avais réussi avec les expressions régulières.

Mille excuses une fois encore.

Amicalement,
Bruno
"Pascal Peyremorte" <p.peyremorte_oter_ces_mots@free.fr> a écrit dans le message de news: fmt53e$252$1@sd-6498.dedibox.fr...
Bruno Mannina a écrit :
> Salut Pascal,
>
> Merci pour ton code source mais hélas chez moi cela ne fonctionne pas du
> tout avec mon fichier exemple, en fait il sort


Bonjour,

* 2 minutes pour créer un nouveau projet et y mettre :
1 bouton,
1 open dialog
1 memo pour charger le fichier avec LoadFromFile
1 listbox pour mettre le résultat
+ copie de la routine que j'avais posté

* 2 minutes pour voir que :
- le premier PDeb=Nil ne sert plus à rien (reporté par delphi),
- il faut remplacer <>0 par =0 dans la première ligne de la sous procédure (pardi !)
et ça donne :


C'est bien gentil de demander "un peu d'aide", mais fais l'effort de chercher un peu, quand même !
Bon, je veux bien faire ton programme entièrement, mais je le facture à qui ?
:-)

Pascal

  Réponse avec citation
Vieux 21/01/2008, 10h29   #23
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TRegExpr] Un peu d'aide pour son utilisation dans une boucle

Bruno Mannina a écrit :
> Salut Pascal,
>
> C'est vrai j'ai honte, j'aurai pu faire au moins l'effort d'analyser
> ton prog si gentiment posté. Je m'en excuse encore.
> Autre chose qui m'a fait zapper un petit peu ton prog c'est que
> j'avais réussi avec les expressions régulières.
>
> Mille excuses une fois encore.
>
> Amicalement,
> Bruno

Bonjour !

Comme "faute avouée est à moitié pardonnée" et qu' "un homme avertit en
vaut deux", tu disposes de deux moitiés de pardon ! :-)

A+ pour de nouvelles aventures !
Pascal
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 17h34.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,38610 seconds with 31 queries