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

Résolu
guiguidu25 Messages postés 280 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 9 février 2010 - 25 oct. 2008 à 15:21
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 - 25 oct. 2008 à 16:33
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

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
25 oct. 2008 à 16:03
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
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
25 oct. 2008 à 15:26
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
0
guiguidu25 Messages postés 280 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 9 février 2010 1
25 oct. 2008 à 15:47
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
0
guiguidu25 Messages postés 280 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 9 février 2010 1
25 oct. 2008 à 16:10
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
25 oct. 2008 à 16:33
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
0
Rejoignez-nous