remplacement de replaceString

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

remplacement de replaceString

Message par minirop »

bonjour,
j'aimerais savoir s'il existait une fonction comme replaceString mais qui fait un seul remplacement ? parce que dans mon interprète, les expressions sont parser comme des chaines donc j'utilises remplaceStrin mais comme replaceString remplace TOUTES les occurences, çà merde.
exemple :

Code : Tout sélectionner

5*5/10*2 => 25/10*2 => 2.5*2 => 5 ; OK!
5*5/5*5 => 25/25 => 1 ; pas OK !
voilà si quelqu'un à une astuce
merci
++
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

c'est peut-être plus compliqué à mettre en oeuvre mais tu peux te faire une fonction qui ferait en gros ceci :

-trouver la première occurence de la chaine à remplacer
-récupérer ce qu'il y a avant
-récupérer ce qu'il y a après
-retourner "avant" + remplacement + "après"

Dri
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

pas bête j'y avait pas pensé :s
merci
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

allez je suis gentil voila un code tout fait

Code : Tout sélectionner

Procedure$ ReplaceFirst(String$, StringToFind$, StringToReplace$)
  
  Index  = FindString(String$, StringToFind$, 1)
  Length = Len(String$) - Len(StringToFind$) - Index
  
  If Index
    String$ = Left(String$, Index-1) + StringToReplace$ + Right(String$, Length+1)
  EndIf
  
  ProcedureReturn String$
EndProcedure

Debug ReplaceFirst("5*5/5*5", "5*5", "25")
Dri
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

je l'ai fais dans mon coin (j'aime pas les codes tout prêts), voici ce que çà donne :

Code : Tout sélectionner

Procedure.s myReplaceString(string.s,match.s,rempl.s)
	pos.l = FindString(string,match,1)
	endpos.l = pos + Len(match)
	first.s = Left(string,pos-1)
	second.s = Right(string,Len(string)-endpos+1)
	ProcedureReturn first + rempl + second
EndProcedure
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

J'ai ça qui traine d'un vieux programme :

Code : Tout sélectionner

Procedure.s ReplaceFirstString(Chaine.s, ChaineCherchee.s, ChaineRemplacee.s, Position=1)
  Protected p = FindString(Chaine, ChaineCherchee, Position)-1
  If p >= 0
    ProcedureReturn Left(Chaine, p)+ChaineRemplacee+Right(Chaine, Len(Chaine)-Len(ChaineCherchee)-p)
  EndIf
  ProcedureReturn Chaine.s
EndProcedure

txt.s = "Salut gaga, ça va ?"
Debug txt
Debug ReplaceString(txt, "ga", "gi")
Debug ReplaceFirstString(txt, "ga", "gi")
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

dans un tout autre genre - histoire de changer des Left(), Right(), Len()...

Code : Tout sélectionner

Procedure.s Replace(String.s, StringToFind.s, StringToReplace.s)
  Protected *a.Character = @String, *b.Character = @StringToFind
  While *a\c 
    While *a\c = *b\c 
      *a + SizeOf(Character) 
      *b + SizeOf(Character) 
      If Not *b\c 
        ProcedureReturn PeekS(@String, i) + StringToReplace + PeekS(*a) 
      EndIf 
    Wend 
    *a + SizeOf(Character) 
    i + 1 
  Wend 
  ProcedureReturn String 
EndProcedure 
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour Flype tu pourrais expliquer un peu ?
Denis

Bonne Jounée à tous
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Ok j'ai pigé en fin de compte mais c'est aimer se compliquer la vie quand même ! lol
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

oui mais c'est un poil plus rapide :wink: car il n'y a pas de fonction puurebasic sur les chaines (left, right, len, ...) dans l'algo.
Répondre