Accueil > > > FONCTIONS INTERESSANTES D'EXTRACTION DE TEXTE DANS UNE EXPRESSION
FONCTIONS INTERESSANTES D'EXTRACTION DE TEXTE DANS UNE EXPRESSION
Information sur la source
Description
Il s'agit de 4 fonctions que vous pourriez utiliser dans un module InStr2 --> semblable à InStr, sauf que vous indiquez l'occurence du texte recherché InStrRev2 --> semblable à InStrRev, sauf que vous indiquez l'occurence du texte recherché ExtraitTexte --> permet d'extraire dans une chaine string, un texte compris entre 2 délimiteurs quelconques. NombreOccurences --> permet de déterminer le nombre d'occurence d'un texte dans une expression
Source
- Option Explicit
-
- Public Enum EnumSensRechercheTexte
- sr_GaucheVersDroite = 1
- sr_DroiteVersGauche = -1
- End Enum
-
-
- 'Cette fonction différe de la fonction InStr de VB uniquement du fait du paramètre
- 'lOccurence.
- 'lOccurence : elle indique l'ordre de l'occurence du texte recherché
- ' 1=1ère occurence, 2=2ème occurence, ...
- ' -1=dernière occurence, -2=avant dernière occurence, ...
- Public Function InStr2(ByVal sExpression As String, _
- ByVal sTexteRecherche As String, _
- Optional ByVal lOccurence As Long = 1, _
- Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As Long
-
- Dim lOccurenceEnCours As Long, lPosTexteRecherche As Long
-
- Select Case lOccurence
- Case Is > 0:
- Do
- lOccurenceEnCours = lOccurenceEnCours + 1
- lPosTexteRecherche = InStr(lPosTexteRecherche + 1, sExpression, sTexteRecherche, lMethodeComparaison)
- Loop While (lOccurenceEnCours < lOccurence) And (lPosTexteRecherche > 0)
- InStr2 = lPosTexteRecherche
- Case Is < 0: InStr2 = InStrRev2(sExpression, sTexteRecherche, -lOccurence, lMethodeComparaison)
- Case 0: InStr2 = 0
- End Select
- End Function
-
- 'Cette fonction différe de la fonction InStrRev de VB uniquement du fait du paramètre
- 'lOccurence.
- 'lOccurence : elle indique l'ordre de l'occurence du texte recherché
- ' 1=1ère occurence, 2=2ème occurence, ...
- ' -1=dernière occurence, -2=avant dernière occurence, ...
- Public Function InStrRev2(ByVal sExpression As String, _
- ByVal sTexteRecherche As String, _
- Optional ByVal lOccurence As Long = 1, _
- Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As Long
-
- Dim lOccurenceEnCours As Long, lPosTexteRecherche As Long
-
- Select Case lOccurence
- Case Is > 0:
- Do
- lOccurenceEnCours = lOccurenceEnCours + 1
- If lOccurenceEnCours <> 1 Then
- lPosTexteRecherche = InStrRev(sExpression, sTexteRecherche, lPosTexteRecherche + Len(sTexteRecherche) - 2, lMethodeComparaison)
- Else
- lPosTexteRecherche = InStrRev(sExpression, sTexteRecherche, , lMethodeComparaison)
- End If
- Loop While (lOccurenceEnCours < lOccurence) And (lPosTexteRecherche > 0)
- InStrRev2 = lPosTexteRecherche
- Case Is < 0: InStrRev2 = InStr2(sExpression, sTexteRecherche, -lOccurence, lMethodeComparaison)
- Case 0: InStrRev2 = 0
- End Select
- End Function
-
- 'Cette fonction a pour but d'extraire le texte d'une expression texte compris entre
- 'deux délimiteurs textes.
- '
- 'Paramètres:
- '----------
- 'sExpression : Expression texte dans laquelle s'effectuera la recherche
- 'sDelimiteurGauche : Délimiteur gauche du texte à extraire
- 'sDelimiteurDroit : Délimiteur droit du texte à extraire
- 'lSensRecherche : sens de la recherche. +1=[De gauche Vers Droite], -1=[De Droite vers Gauche]
- 'lOccurence : elle indique l'ordre de l'occurence du texte recherché suivant le sens de recherche
- ' 1=1ère occurence, 2=2ème occurence, ...
- ' -1=dernière occurence, -2=avant dernière occurence, ...
- 'lMethodeComparaison : méthode de comparaison pour les délimiteurs gauche et droit, de type VbCompareMethod
- '
- 'Gestion d'erreur:
- '-----------------
- 'Pour toute combinaison de paramètre incohérente la fonction renvoie une chaine vide
- Public Function ExtraitTexte(ByVal sExpression As String, _
- ByVal sDelimiteurGauche As String, ByVal sDelimiteurDroit As String, _
- Optional ByVal lSensRecherche As EnumSensRechercheTexte = sr_GaucheVersDroite, _
- Optional ByVal lOccurence As Long = 1, _
- Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As String
-
- Dim lPosDelimiteurRef As Long
- Dim lPosGaucheResultat As Long, lPosDroiteResultat As Long, lPos2 As Long
-
- Select Case lSensRecherche
- Case sr_GaucheVersDroite:
- 'Recherche de la position du délimiteur gauche suivant lOccurence
- If sDelimiteurGauche = vbNullString Then
- 'Ne tient pas compte de lOccurence si le délimiteur gauche est une chaine vide
- lPosGaucheResultat = 1
- Else
- lPosDelimiteurRef = InStr2(sExpression, sDelimiteurGauche, lOccurence, lMethodeComparaison)
- If lPosDelimiteurRef > 0 Then lPosGaucheResultat = lPosDelimiteurRef + Len(sDelimiteurGauche)
- End If
-
- 'Recherche la position du délimiteur droit pour ressortir le résultat
- If lPosGaucheResultat > 0 Then
- If sDelimiteurDroit = vbNullString Then
- ExtraitTexte = Mid$(sExpression, lPosGaucheResultat)
- Else
- lPos2 = InStr(lPosGaucheResultat, sExpression, sDelimiteurDroit, lMethodeComparaison)
- 'après ce calcul on a toujours soit lPos2=0 soit lPos2 >= lPosGaucheResultat
- If lPos2 > 0 Then
- lPosDroiteResultat = lPos2 - 1
- ExtraitTexte = Mid$(sExpression, lPosGaucheResultat, lPosDroiteResultat - lPosGaucheResultat + 1)
- End If
- End If
- End If
- Case sr_DroiteVersGauche:
- 'Recherche de la position du délimiteur droit suivant lOccurence
- If sDelimiteurDroit = vbNullString Then
- 'Ne tient pas compte de lOccurence si le délimiteur droit est une chaine vide
- lPosDroiteResultat = Len(sExpression)
- Else
- lPosDelimiteurRef = InStrRev2(sExpression, sDelimiteurDroit, lOccurence, lMethodeComparaison)
- If lPosDelimiteurRef > 0 Then lPosDroiteResultat = lPosDelimiteurRef - 1
- End If
-
- 'Recherche la position du délimiteur gauche pour ressortir le résultat
- If lPosDroiteResultat > 0 Then
- If sDelimiteurGauche = vbNullString Then
- ExtraitTexte = Left$(sExpression, lPosDroiteResultat)
- Else
- lPos2 = InStrRev(sExpression, sDelimiteurGauche, lPosDroiteResultat, lMethodeComparaison)
- 'après ce calcul on a toujours soit lPos2=0 soit lPos2 <= lPosDroiteResultat
- If lPos2 > 0 Then
- lPosGaucheResultat = lPos2 + Len(sDelimiteurGauche)
- ExtraitTexte = Mid$(sExpression, lPosGaucheResultat, lPosDroiteResultat - lPosGaucheResultat + 1)
- End If
- End If
- End If
- Case Else:
- End Select
- End Function
-
- 'Cette fonction permet de déterminer le nombre d'occurences d'un texte dans une expression
- Public Function NombreOccurences(ByVal sExpression As String, _
- ByVal sTexteRecherche As String, _
- Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As Long
- Dim lOccurenceEnCours As Long, lPosTexteRecherche As Long
-
- If sTexteRecherche = vbNullString Then Exit Function
-
- lPosTexteRecherche = InStr(1, sExpression, sTexteRecherche, lMethodeComparaison)
- Do While lPosTexteRecherche > 0
- lOccurenceEnCours = lOccurenceEnCours + 1
- lPosTexteRecherche = InStr(lPosTexteRecherche + 1, sExpression, sTexteRecherche, lMethodeComparaison)
- Loop
- NombreOccurences = lOccurenceEnCours
- End Function
Option Explicit
Public Enum EnumSensRechercheTexte
sr_GaucheVersDroite = 1
sr_DroiteVersGauche = -1
End Enum
'Cette fonction différe de la fonction InStr de VB uniquement du fait du paramètre
'lOccurence.
'lOccurence : elle indique l'ordre de l'occurence du texte recherché
' 1=1ère occurence, 2=2ème occurence, ...
' -1=dernière occurence, -2=avant dernière occurence, ...
Public Function InStr2(ByVal sExpression As String, _
ByVal sTexteRecherche As String, _
Optional ByVal lOccurence As Long = 1, _
Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As Long
Dim lOccurenceEnCours As Long, lPosTexteRecherche As Long
Select Case lOccurence
Case Is > 0:
Do
lOccurenceEnCours = lOccurenceEnCours + 1
lPosTexteRecherche = InStr(lPosTexteRecherche + 1, sExpression, sTexteRecherche, lMethodeComparaison)
Loop While (lOccurenceEnCours < lOccurence) And (lPosTexteRecherche > 0)
InStr2 = lPosTexteRecherche
Case Is < 0: InStr2 = InStrRev2(sExpression, sTexteRecherche, -lOccurence, lMethodeComparaison)
Case 0: InStr2 = 0
End Select
End Function
'Cette fonction différe de la fonction InStrRev de VB uniquement du fait du paramètre
'lOccurence.
'lOccurence : elle indique l'ordre de l'occurence du texte recherché
' 1=1ère occurence, 2=2ème occurence, ...
' -1=dernière occurence, -2=avant dernière occurence, ...
Public Function InStrRev2(ByVal sExpression As String, _
ByVal sTexteRecherche As String, _
Optional ByVal lOccurence As Long = 1, _
Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As Long
Dim lOccurenceEnCours As Long, lPosTexteRecherche As Long
Select Case lOccurence
Case Is > 0:
Do
lOccurenceEnCours = lOccurenceEnCours + 1
If lOccurenceEnCours <> 1 Then
lPosTexteRecherche = InStrRev(sExpression, sTexteRecherche, lPosTexteRecherche + Len(sTexteRecherche) - 2, lMethodeComparaison)
Else
lPosTexteRecherche = InStrRev(sExpression, sTexteRecherche, , lMethodeComparaison)
End If
Loop While (lOccurenceEnCours < lOccurence) And (lPosTexteRecherche > 0)
InStrRev2 = lPosTexteRecherche
Case Is < 0: InStrRev2 = InStr2(sExpression, sTexteRecherche, -lOccurence, lMethodeComparaison)
Case 0: InStrRev2 = 0
End Select
End Function
'Cette fonction a pour but d'extraire le texte d'une expression texte compris entre
'deux délimiteurs textes.
'
'Paramètres:
'----------
'sExpression : Expression texte dans laquelle s'effectuera la recherche
'sDelimiteurGauche : Délimiteur gauche du texte à extraire
'sDelimiteurDroit : Délimiteur droit du texte à extraire
'lSensRecherche : sens de la recherche. +1=[De gauche Vers Droite], -1=[De Droite vers Gauche]
'lOccurence : elle indique l'ordre de l'occurence du texte recherché suivant le sens de recherche
' 1=1ère occurence, 2=2ème occurence, ...
' -1=dernière occurence, -2=avant dernière occurence, ...
'lMethodeComparaison : méthode de comparaison pour les délimiteurs gauche et droit, de type VbCompareMethod
'
'Gestion d'erreur:
'-----------------
'Pour toute combinaison de paramètre incohérente la fonction renvoie une chaine vide
Public Function ExtraitTexte(ByVal sExpression As String, _
ByVal sDelimiteurGauche As String, ByVal sDelimiteurDroit As String, _
Optional ByVal lSensRecherche As EnumSensRechercheTexte = sr_GaucheVersDroite, _
Optional ByVal lOccurence As Long = 1, _
Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As String
Dim lPosDelimiteurRef As Long
Dim lPosGaucheResultat As Long, lPosDroiteResultat As Long, lPos2 As Long
Select Case lSensRecherche
Case sr_GaucheVersDroite:
'Recherche de la position du délimiteur gauche suivant lOccurence
If sDelimiteurGauche = vbNullString Then
'Ne tient pas compte de lOccurence si le délimiteur gauche est une chaine vide
lPosGaucheResultat = 1
Else
lPosDelimiteurRef = InStr2(sExpression, sDelimiteurGauche, lOccurence, lMethodeComparaison)
If lPosDelimiteurRef > 0 Then lPosGaucheResultat = lPosDelimiteurRef + Len(sDelimiteurGauche)
End If
'Recherche la position du délimiteur droit pour ressortir le résultat
If lPosGaucheResultat > 0 Then
If sDelimiteurDroit = vbNullString Then
ExtraitTexte = Mid$(sExpression, lPosGaucheResultat)
Else
lPos2 = InStr(lPosGaucheResultat, sExpression, sDelimiteurDroit, lMethodeComparaison)
'après ce calcul on a toujours soit lPos2=0 soit lPos2 >= lPosGaucheResultat
If lPos2 > 0 Then
lPosDroiteResultat = lPos2 - 1
ExtraitTexte = Mid$(sExpression, lPosGaucheResultat, lPosDroiteResultat - lPosGaucheResultat + 1)
End If
End If
End If
Case sr_DroiteVersGauche:
'Recherche de la position du délimiteur droit suivant lOccurence
If sDelimiteurDroit = vbNullString Then
'Ne tient pas compte de lOccurence si le délimiteur droit est une chaine vide
lPosDroiteResultat = Len(sExpression)
Else
lPosDelimiteurRef = InStrRev2(sExpression, sDelimiteurDroit, lOccurence, lMethodeComparaison)
If lPosDelimiteurRef > 0 Then lPosDroiteResultat = lPosDelimiteurRef - 1
End If
'Recherche la position du délimiteur gauche pour ressortir le résultat
If lPosDroiteResultat > 0 Then
If sDelimiteurGauche = vbNullString Then
ExtraitTexte = Left$(sExpression, lPosDroiteResultat)
Else
lPos2 = InStrRev(sExpression, sDelimiteurGauche, lPosDroiteResultat, lMethodeComparaison)
'après ce calcul on a toujours soit lPos2=0 soit lPos2 <= lPosDroiteResultat
If lPos2 > 0 Then
lPosGaucheResultat = lPos2 + Len(sDelimiteurGauche)
ExtraitTexte = Mid$(sExpression, lPosGaucheResultat, lPosDroiteResultat - lPosGaucheResultat + 1)
End If
End If
End If
Case Else:
End Select
End Function
'Cette fonction permet de déterminer le nombre d'occurences d'un texte dans une expression
Public Function NombreOccurences(ByVal sExpression As String, _
ByVal sTexteRecherche As String, _
Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As Long
Dim lOccurenceEnCours As Long, lPosTexteRecherche As Long
If sTexteRecherche = vbNullString Then Exit Function
lPosTexteRecherche = InStr(1, sExpression, sTexteRecherche, lMethodeComparaison)
Do While lPosTexteRecherche > 0
lOccurenceEnCours = lOccurenceEnCours + 1
lPosTexteRecherche = InStr(lPosTexteRecherche + 1, sExpression, sTexteRecherche, lMethodeComparaison)
Loop
NombreOccurences = lOccurenceEnCours
End Function
Conclusion
je peux donner quelques résultats retournés par la fonction
ExtraitTexte("ababacx","aba","x",,1)="ba c" ExtraitTexte("ababacx","aba","x",,2)="c" Extrai tTexte("ababacx","aba","x",,-1)="c"
ExtraitTexte( "c:\dos1\dos2\dos3\mabd.mdb","\","")="dos1\dos2\do s3\mabd.mdb" ExtraitTexte("c:\dos1\dos2\dos3\mabd. mdb","\","",,-1)="mabd.mdb" ExtraitTexte("c:\dos1\ dos2\dos3\mabd.mdb","\","\",sr_DroiteVersGauche,-2 )="dos1" ExtraitTexte("c:\dos1\dos2\dos3\mabd.mdb" ,"\","\",sr_DroiteVersGauche,-3)"dos2" ExtraitText e("c:\dos1\dos2\dos3\mabd.mdb","\","\", sr_GaucheVersDroite ,-2)="dos3" ...
Signalez-moi si vous trouvez des bugs ou des algorithmes plus interessants, je suis preneur.
Historique
- 27 juillet 2006 11:55:31 :
- Ajout de la fonction NombreOccurences
Public Function NombreOccurences(ByVal sExpression As String, _
ByVal sTexteRecherche As String, _
Optional ByVal lMethodeComparaison As VbCompareMethod = vbTextCompare) As Long
- 27 juillet 2006 12:12:36 :
- Contrôle du cas sTexteRecherche est une chaine vide dans la fonction NombreOccurences
ajout de la ligne "If sTexteRecherche = vbNullString Then Exit Function" dans la fonction qui évite de tourner en rond
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|