Obtenir le texte contenu entre deux strings [vb.net] [Résolu]

Signaler
Messages postés
280
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
9 février 2010
-
Messages postés
111
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
17 novembre 2012
-
Bonjour à tous :)

Je code en vb.net...
J'ai un petit problème assez embêtant que j'aimerais résoudre...

Prenons cet exemple pour expliquer mon cas : 

J'ai une phrase :
                  "Bonjour, comment allez-vous ?"

Existe-t-il un moyen de n'obtenir qu'un seul de ces mots (ex : "comment") en indiquant seulement le texte qui entoure ce mot ? (ex : "Bonjour, " et " allez-vous ?")

Une fonction qui se présenterait de cette façon par exemple :

      Séparer("Bonjour, comment allez-vous ?", "Bonjour, ", " allez-vous ?")
Ici, "Bonjour, " et " allez-vous ?" sont les strings qui entourent le texte que je veux obtenir...

Ma situation est assez compliquée à expliquée mais j'éspère avoir été assez précis.
J'ai déjà trouvé un moyen qui résoud mon problème mais il est assez compliqué donc si il existe plus simple...

Merci d'avance de me repondre  et de m'aider
Black G - Le futur de Microsoft

5 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Nan, il s'agit pas de celle là, mais de la méthode Split disponible sur chaque objet de type String

D'une manière générale, tout ce que propose Microsoft.VisualBasic est présent ailleurs dans les diverses classes du framework. Microsoft.VisualBasic est fourni à la base pour assurer la compatibilité du code VB6 converti à l'aide de l'assistant. Personellement, j'essaye de m'en passer
.

Si la méthode Split permet de passer plusieurs séparateurs, il s'agit de caractères. Elle n'est effectivement pas prévu, contrairement à ce que je croyais pour prendre plusieurs séparateurs de type chaine de caractère.

Tu vas pouvoir te faire ta propre fonction
- tu recherche dans ta chaine, la position du premier paramètre. Si tu le trouve, avec sa longueur tu en déduit la position du caractère suivant.
- tu recherche la position du second paramètre
- Il ne te reste plus qu'à prendre ce qu'il y a entre les 2 avec la méthode SubString.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Essaye avec String.Split, je crois qu'elle permet ce genre de chose

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
280
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
9 février 2010
1
Merci pour ta réponse

Juste un tout petit problème... La fonction se présente de cette manière :

Microsoft.VisualBasic.Split(Expression As String, Delimiter As String, Limit As Integer,
CompareMethod)

Et j'ai du mal à comprendre ce que je dois mettre...

Expression As String = "Bonjour, comment allez-vous" (Je pense que sa c'est exact)
Delimiter As String = ? (Là je ne vois pas car on ne me demande qu'un seul Delimiter...)
Limit As Integer = ?

Merci d'avance ^^

Black G - Le futur de Microsoft
Messages postés
280
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
9 février 2010
1
Ok ! Merci à toi pour ces informations !
Effectivement je vais devoir faire ce que je ne voulais pas faire : utiliser la position des caractères, etc. ^^
Tant pis ! Au moins je sais que je ne me casse pas la tête pour rien !
Bonne continuation

Black G - Le futur de Microsoft
Messages postés
111
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
17 novembre 2012
5
Voici une fonction qui fait ce que tu demandes.
A+
M.Devaux

Public





Function

EnSandwich(


ByVal

chaine


As





String

,


ByVal

baliseDebut


As





String

,


ByVal

baliseFin


As





String

)


As





String








Dim

debut


As





Integer








Dim

fin


As





Integer








'*** Si la chaŒne est vide








If

chaine =


""





Then





Return





""








'*** Calculer le d‚but








If

baliseDebut =


""





Then


debut = 0








ElseIf

chaine.Contains(baliseDebut) =


False





Then


debut = 0








Else


debut = Len(chaine) - 1








For

i


As





Integer

= 0


To

Len(chaine) - Len(baliseDebut)



If

chaine.Substring(i, Len(baliseDebut)) = baliseDebut


Then


debut = i + Len(baliseDebut)








Exit





For








End





If








Next








End





If








'*** Calculer la fin








If

baliseFin =


""





Then


fin = Len(chaine)








ElseIf

chaine.Contains(baliseFin) =


False





Then


fin = Len(chaine)








Else


fin = Len(chaine)








For

i


As





Integer

= Len(chaine) - Len(baliseFin)


To

0


Step

-1



If

chaine.Substring(i, Len(baliseFin)) = baliseFin


Then


fin = i








Exit





For








End





If








Next








End





If








'*** Renvoyer la partie en sandwich








If

fin <= debut + Len(baliseDebut) - 1


Then








Return





""








Else








Return

chaine.Substring(debut, fin - debut)



End





If








End





Function