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;
|