Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2418 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  StringReplace

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

StringReplace

n°909617
Sidius
Cheat Is Shit
Posté le 28-11-2004 à 13:32:22  profilanswer
 

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:  
 

mood
Publicité
Posté le 28-11-2004 à 13:32:22  profilanswer
 

n°909642
Inekman
Posté le 28-11-2004 à 13:58:32  profilanswer
 

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

n°909646
antp
Super Administrateur
Champion des excuses bidons
Posté le 28-11-2004 à 14:00:22  profilanswer
 

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
n°909659
Inekman
Posté le 28-11-2004 à 14:11:52  profilanswer
 

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.

n°909671
antp
Super Administrateur
Champion des excuses bidons
Posté le 28-11-2004 à 14:22:01  profilanswer
 

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
n°909878
Sidius
Cheat Is Shit
Posté le 28-11-2004 à 22:39:02  profilanswer
 

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!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  StringReplace

 

Sujets relatifs
Plus de sujets relatifs à : StringReplace


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)