StringReplace

StringReplace - Delphi/Pascal - Programmation

Marsh Posté le 28-11-2004 à 13:32:22    

Voila, j'aimerai remplacé un caractère par un autre dans une chaine.
J'ai vu qu'il éxistait une fonction qui s'appelle string replace:
 
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
 
Seulement je n'arrive pas a me servir de cette fonction car je ne sais pas quoi mettre pour le TReplaceFlags...
 
Sinon, j'ai tenté de faire une fonction moi même:
 

Code :
  1. function remplacer(S,C1,C2:string):string;
  2. var
  3. a,b:integer;
  4. S1,S2:string;
  5. begin
  6. result:='';
  7. a:=0;
  8. b:=0;
  9. repeat
  10. if S[a]=C1 then
  11.   begin
  12.   b:=0;
  13.   repeat
  14.    S1:=S1+S[b];
  15.    b:=b+1;
  16.   until b=a-1;
  17.   b:=strlen(pchar(S));
  18.   repeat
  19.    S2:=S[b]+S2;
  20.    b:=b-1;
  21.   until b=a+1;
  22.   result:=S1+C2+S2;
  23. end;
  24. a:=a+1;
  25. until a=strlen(pchar(S));
  26. end;


 
Cette fonction marche bien quand C2 est une chaîne vide, mais lorsqu'elle contient quelque chose, j'obtien un Access Violation a cette ligne :  if S[a]=C1 then
 
Voila, donc j'aimerai soit savoir comment marche StringReplace et encore mieux d'ou vient cet Access Violation qui me revien souvent  :??:  
 
Merci d'avance ! :jap:  
 

Reply

Marsh Posté le 28-11-2004 à 13:32:22   

Reply

Marsh Posté le 28-11-2004 à 13:58:32    

pour le flag, tu dois utiliser :
 
rfReplaceAll : remplace toutes les occurences. Si tu ne mets pas ce drapeau, seule la première occurence de la sous chaine sera remplacée.
 
rfIgnoreCase : Ce drapeau permet d'ignorer la casse de la chaine remplacée. Si tu ne mets pas ce drapeau, seule les chaines correspondant à la même casse seront remplacées.
 
Pour ta fonction, j'ai pas cherché encore mais je jette un oeil dès que j'ai le temps, sauf si entre temps le big boss antp trouve une solution :p

Reply

Marsh Posté le 28-11-2004 à 14:00:22    

s := StringReplace(s, old, new, []);
 
à la place de [] tu peux mettre [rfReplaceAll] pour toutes les occurences, [rfReplaceAll, rfIgnoreCase] pour ne pas tenir compte de la casse, etc. Il y a pas un exemple dans l'aide ? :??:
 
Pour ta fonction, outre le fait que ce ne soit pas très optimisé (:D) ni bien indenté, tu sembles avoir oublié que les chaînes commencent à 1 et non à 0 ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-11-2004 à 14:11:52    

j'ai regardé antp, y'a pas d'exemple dans l'aide, y'a juste la description de la fonction et celle des flag mais pas d'exemple.

Reply

Marsh Posté le 28-11-2004 à 14:22:01    

En effet, pas d'exemple... Bizarre. Peut-être que c'est dans l'aide de C++Builder alors (où là l'utilisation des flags est plus compliquée que dans Delphi)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-11-2004 à 22:39:02    

Merci beaucoup!
 
Je savais pas que les chaînes commençant a 1 et non a 0, c'est bon a savoir.
 
Sinon oui il n'y a pas d'exemple dans l'aide c'est pour sa que je n'y arrivai pas, je comprenai pas tout a fait cette histoire de flag.
 
En tout cas merci beaucoup!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed