Remplecer %variable% dans un string ou un tstring [Résolu]

Signaler
Messages postés
4
Date d'inscription
samedi 14 novembre 2009
Statut
Membre
Dernière intervention
10 août 2010
-
Shadow29c
Messages postés
4
Date d'inscription
samedi 14 novembre 2009
Statut
Membre
Dernière intervention
10 août 2010
-
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

Messages postés
76
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
10 août 2010

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
Messages postés
251
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016

Bonjour

il faudrait regarder la fonction StringReplace

A+
Messages postés
4
Date d'inscription
samedi 14 novembre 2009
Statut
Membre
Dernière intervention
10 août 2010

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;