Remplecer %variable% dans un string ou un tstring

Résolu
Shadow29c Messages postés 4 Date d'inscription samedi 14 novembre 2009 Statut Membre Dernière intervention 10 août 2010 - 10 août 2010 à 03:14
Shadow29c Messages postés 4 Date d'inscription samedi 14 novembre 2009 Statut Membre Dernière intervention 10 août 2010 - 10 août 2010 à 17:21
Bonjour,

J’ai besoin de remplacer des variables dans un texte. Comme ce n'est pas évident à expliquer, je vais placer un exemple. Imaginer que c'est une lettre.

"
Bonjour %nom%,
J'ai bien aimé la rencontre du %date%.
"

Ce qui devrait se convertir en :

"
Bonjour Michel,
J'ai bien aimé la rencontre du 1er avril 1930.
"

Après plusieurs recherches sur internet, j'ai découvert une procédure me permettant d'apporter les modifications.


Procedure TMain.remplacer(VarRichText: trichedit; VarCherche, VarRemplace : string);
var
debut,
fin : integer;
oldCursor : TCursor;
begin
VarRichText.Enabled := true;
oldCursor := Screen.Cursor;
Screen.Cursor := crHourglass;
with VarRichText do begin
debut := 0;
fin := length(Text);
debut := FindText(VarCherche, debut, fin, []);
while debut <> -1 do begin
SetFocus;
SelStart := debut;
SelLength := length(VarCherche) ;
SelText := VarRemplace;
debut := FindText(VarCherche, debut + length(VarRemplace), fin, []);
End;
End;
Screen.Cursor := oldCursor;
VarRichText.Enabled := False;
end;

Mon Problème, c'est que je dois déplacer le curseur pour faire la recherche et le remplacement. Mais après, le curseur disparaît parce que je place le "Richtext.Enablee := False". J'aimerais que le curseur revienne au dernier endroit où il était avant que j'appelle cette procédure. Prenons comme exemple, le curseur doit retourner au 4e caractère du "tedit.text" d'où il est parti. Ou, existe-t-il une façon plus simple d'appliquer les changements? Avant j'utilisais "Format", mais cette fonction n'est pas assez complète pour l'utilisation que j'aimerais en faire.

J'utilise Delphi 2009 sous Windows 7 64bit

3 réponses

cs_PHIL63 Messages postés 76 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 10 août 2010
10 août 2010 à 10:04
Salut,
pour un texte contenu dans une "String" tu as au moins deux fonctions qui peuvent te servir :
(Aide de Delphi)
- function AnsiReplaceStr(const AText, AFromText, AToText: string): string;
Remplace toutes les occurrences d'une sous-chaîne par une autre chaîne

- function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags):string;
Renvoie une chaîne dans laquelle des occurrences d'une sous-chaîne sont remplacées par une autre sous-chaîne.

Philippe DROUET
3
fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
10 août 2010 à 10:08
Bonjour

il faudrait regarder la fonction StringReplace

A+
3
Shadow29c Messages postés 4 Date d'inscription samedi 14 novembre 2009 Statut Membre Dernière intervention 10 août 2010
10 août 2010 à 17:21
Merci Phil63 et fbalien,

C'est la première fois que j'utilise le site pour poser une question et je suis grandement impressionner par la rapidité de votre réponse.
J'ai utilisé la fonction "StringReplace" finalement. Je me cassais vraiment trop la tête pour rien.

Voici ma nouvelle Procedure.


Procedure TMain.remplacer(VarRichText: trichedit;VarCherche, VarRemplace : string);

var
I : word;

begin
for I := 0 to VarRichText.Lines.Count - 1 do
VarRichText.Lines[I]:=StringReplace(VarRichText.Lines[I],VarCherche,VarRemplace,[rfReplaceAll, rfIgnoreCase]);
end;
0
Rejoignez-nous