Vb / vb.net : renvoyer ce qu'il y a avant une string, apres une string ou entre deux strings, dans une string

3/5 (3 avis)

Snippet vu 7 817 fois - Téléchargée 47 fois


Contenu du snippet

Ouais bon comme l'enormement long titre le dit, ces trois fonctions vous renvoient ce qu'il y à avant un string, apres une string, ou entre deux string.
C'est super simple mais ca peut servir aux debutants...

Update : Equivalent en vb.net

Source / Exemple :


'pour lire ce qu'il y a avant la variable str
Public Function hb_avant_str(source As String, str As String)
If InStr(1, source, str) > 0 Then
hb_avant_str = Mid(source, 1, InStr(1, source, str) - 1)
Else
MsgBox "La chaine de characteres n'a pas été trouvée"
End If
End Function

'pour lire ce qu'il y a apres la variable str
Public Function hb_apres_str(source As String, str As String)
If InStr(1, source, str) > 0 Then
hb_apres_str = Mid(source, InStr(1, source, str) + Len(str), Len(source))
Else
MsgBox "La chaine de characteres n'a pas été trouvée"
End If
End Function

'Pour lire ce qu'il y a entre les variables stravant et strapres
Public Function hb_str_in_str(source As String, stravant As String, strapres As String)
If InStr(1, source, stravant) > 0 Then
If InStr((InStr(1, source, stravant)), source, strapres) > 0 Then
If Mid(source, (InStr(1, source, stravant) + Len(stravant)), InStr((InStr(1, source, stravant) + Len(stravant)), source, strapres) - (InStr(1, source, stravant) + Len(stravant))) <> "" Then
hb_str_in_str = Mid(source, (InStr(1, source, stravant) + Len(stravant)), InStr((InStr(1, source, stravant) + Len(stravant)), source, strapres) - (InStr(1, source, stravant) + Len(stravant)))
Else
MsgBox "Il n'y a rien entre les deux chaines"
End If
Else
MsgBox "la deuxieme chaine est inexistante"
End If
Else
MsgBox "La premiere chaine de characteres n'a pas été trouvée"
End If
End Function

'Voila pour appeler les fonction : votrestring = lafonction(lesargument,lesautres,...) 

'------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------
'Update : Vb.Net :

    'pour lire ce qu'il y a avant la variable str
    Public Function before_str(ByVal source As String, ByVal str As String)
        If source.IndexOf(str, 0) > 0 Then
            Return source.Substring(0, source.IndexOf(str, 0) - 1)
        End If
    End Function

    'pour lire ce qu'il y a apres la variable str
    Public Function after_str(ByVal source As String, ByVal str As String)
        If source.IndexOf(str, 0) > 0 Then
            Return source.Substring(source.IndexOf(str, 0) + str.Length)
        End If
    End Function

    Public Function between_str(ByVal StartStr As String, ByVal str1 As String, ByVal str2 As String) As String
        If StartStr.IndexOf(str1, 0) >= 0 Then
            If StartStr.IndexOf(str2, StartStr.IndexOf(str1, 0) + str1.Length) >= 0 Then
                Return StartStr.Substring(StartStr.IndexOf(str1, 0) + str1.Length, StartStr.IndexOf(str2, StartStr.IndexOf(str1) + str1.Length) - StartStr.IndexOf(str1) - str1.Length) 'InStr((InStr(1, startStr, str1) + Len(str1)), startStr, str2) - (InStr(1, startStr, str1) + Len(str1)))
            End If
        End If
    End Function

Conclusion :


c'est bon, c'est simple certe, mais ca peut servir...alors les critiques non constructives, vous pouvez les garder.

A voir également

Ajouter un commentaire Commentaires
Messages postés
97
Date d'inscription
vendredi 22 octobre 1999
Statut
Membre
Dernière intervention
13 juin 2016
1
Juste pour essayer de mettre tout le mon de d'accord et faire un bon copier/coller pour ceux que cela intéressera :

Function strBefore(ByVal thisStr As String, ByVal inThiStr As String) As String
strBefore = vbNullString

Try
strBefore = Left(inThiStr, InStr(inThiStr, thisStr) - 1)

Catch Err As Exception
Call MsgBox("Unable to get before String: " & thisStr & vbCrlf & Err.Message)

End Try
End Function

Function strAfter(ByVal thisStr As String, ByVal inThiStr As String) As String
strAfter = vbNullString

Try
strAfter = Right(inThiStr, Len(inThiStr) - InStr(inThiStr, thisStr) - Len(thisStr) + 1)

Catch Err As Exception
Call MsgBox("Unable to get after String: " & thisStr & vbCrlf & Err.Message)

End Try
End Function

Function strBetween(ByVal thisStr As String, ByVal thisSecondStr As String, ByVal inThiStr As String) As String
strBetween = vbNullString

Try
strBetween = strAfter(thisStr, strBefore(thisSecondStr, inThiStr))

Catch Err As Exception
Call MsgBox("Unable to get between String: " & thisStr & " - " & thisSecondStr & vbCrlf & Err.Message)

End Try
End Function
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
2
C'est vrai que j'aurais pu utiliser left et right, mais bon, je laisse comme tel, comme ca il y a deux exemples sur une meme page.
Sinon j'ai pas le reflexe d'utiliser mes fonctions dans d'autres fonctions, mais ca aurait été bien plus rapide à écrire pour la fonction entre deux strings c vrai... enfin bon, au moins c'est clair, et on est pas obligé de declarer les 3 si on veux utiliser que la derniere (je cherchais une excuses :) )
Merci du comment'
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

Pratique en effet pour des begineurs, mais un peu lourd !
Tiens, voici une critique constructive, car je propose ceci pour y palier :

Function Avant(ByVal CetteStr As String, ByVal DansCetteStr As String) As String
Avant = Left(DansCetteStr, InStr(DansCetteStr, CetteStr) - 1)
End Function

Function Apres(ByVal CetteStr As String, ByVal DansCetteStr As String) As String
Apres = Right(DansCetteStr, Len(DansCetteStr) - InStr(DansCetteStr, CetteStr) - Len(CetteStr) + 1)
End Function

Function Entre(ByVal CetteStr As String, ByVal EtCetteStr As String, ByVal DansCetteStr As String) As String
Entre = Apres(CetteStr, Avant(EtCetteStr, DansCetteStr))
End Function

Pareille, mais en 1 ligne par fonction, SAUF SAUF SAUF que toi, tu as gérés les erreurs possibles, alors que ceci ne le fait pas...
Un plus pour un moins ou vice-versa quoi... ;)
(je propose ceci car en générale il s'agit de découper une chaine type formattée spécialement, donc normalement ces fonctions devraient convenir...)
Tchao @+

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.