MINI-FONCTION REPLACE POUR VB5

Signaler
Messages postés
1467
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
5 mai 2010
-
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24559-mini-fonction-replace-pour-vb5

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
ok ok.

bonne continuation ;)
Messages postés
5
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
17 août 2004

Merci à RENFIELD et SCALPWEB pour leurs commentaires constructifs.
Pourquoi j'utilise "Let" ? Je sais, c'est inutile. Une déformation, sans doute, car avant je pratiquais le "Pascal" où les instructions d'affectation sont bien différenciées. Pour "Let", c'est la même idée, un souci de lisibilité.
Par ailleurs, en Basic, je crois que je vais délaisser "Right$" au profit de "Mid$", quand même beaucoup plus souple : pas besoin de se "traîner" la longueur de la chaîne avec "Mid$". Pourquoi ai-je (avais-je) l'habitude d'utiliser "Right$" ? Même raison : lisibilité. Mais.. çà a un prix qui s'appelle... perte d'efficacité.
Dans tous les cas, MERCI pour les remarques qui me permettent de progresser, ce qui, sommes toutes, est essentiel (du moins pour moi).
Messages postés
1467
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
5 mai 2010
3
Oui, effectivement, tu devrais mettre rapidment ta source à jour.
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
Salut ;)

j'ai testé ta fonction... elle comporte des bugs...


voici une version corrigée (et qui supporte l'argument Compare....)


Public Function ReplaceR(ByVal Expression As String, ByVal Find As String, ByVal Replace As String, Optional ByVal Start As Long 1, Optional ByVal Count As Long -1, Optional ByVal Compare As VbCompareMethod = vbTextCompare) As String
Dim P As Long: P = 1
Dim LFind As Long: LFind = Len(Find)
Dim LReplace As Long: LReplace = Len(Replace)

Select Case Start
Case Is <= 0
Err.Raise 5
Case Is > Len(Expression)
Exit Function
Case Else
Expression = Mid$(Expression, Start)
End Select

ReplaceR = Expression

If Find vbNullString Or Count 0 Then Exit Function
Do
Let P = InStr(P, Expression, Find, Compare)

If P > 0 Then
Expression = Left$(Expression, P - 1) & Replace & Mid$(Expression, P + LFind)

Count = Count - 1
P = P + LReplace
End If
Loop Until (P <0) Or (Count 0)

ReplaceR = Expression
End Function


Buggée ? oui, car tu recommence la recherche a partie du premier caractère a chaque fois....

replacet("ABBCC", "BC", "")
-> ACC au lieu de ABC

(au fait, pourquoi utilises tu 'Let' ?)
Messages postés
1467
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
5 mai 2010
3
Je confirme, cette fonction n'est pas intégré dans VB5 (tu moins dans MON VB5 et je doute qu'il soit différent des autres).
Je comptais développé une dll contennant toutes les fonctions en moins de VB5. Je sais qu'il y a Replace, et Splite. Si qqn en connait d'autre, je suis prenneur.

Sinon, bien ta source ! :-)