Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 16 juil. 2004 à 11:14
ok ok.
bonne continuation ;)
RedLupus
Messages postés5Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention17 août 2004 16 juil. 2004 à 09:42
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).
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 20104 15 juil. 2004 à 18:23
Oui, effectivement, tu devrais mettre rapidment ta source à jour.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 15 juil. 2004 à 15:26
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' ?)
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 20104 15 juil. 2004 à 13:39
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.
16 juil. 2004 à 11:14
bonne continuation ;)
16 juil. 2004 à 09:42
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).
15 juil. 2004 à 18:23
15 juil. 2004 à 15:26
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' ?)
15 juil. 2004 à 13:39
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 ! :-)