cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
19 nov. 2008 à 20:16
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 2013
-
20 nov. 2008 à 15:40
Salut,
Alors voila, j'ai fait il y a plusieurs mois, une fonction qui permet de récupérer la balise html dans lequel se trouve le caret d'un textbox (le contenu du textbox est donc du html).
Elle fonctionne plutôt bien, mais j'ai un petit bug que je n'arrive décidément pas à corriger :
En fait, si j'ai ça :
<html>
</html>
et que le curseur est dans la balise
, la fonction va me récupérer
par contre, si j'ai ça :
<html>
</html>
là, ça marche plus, le problème est donc que si la balise est collé à une autre, ça fonctionne plus, et je trouve pas pourquoi.
Pouvez vous m'aider?
Voici mon code :
' Permet de récupérer le nom de la balise dans lequel on est (la dans où se trouve le caret)
' HTML = est égale au document HTML
' Position = est égale à la position du caret
Shared Function Recuperer_Balise_Actuel(ByVal HTML As String, ByVal Position As Integer) As String
' Déclaration
Dim RESULTAT As String = Nothing
Dim DANS_UNE_BALISE_tmp1 As Boolean = True
Dim DANS_UNE_BALISE_tmp2 As Boolean = True
Dim DANS_UNE_BALISE As Boolean = False
' false = echec (n'est pas dans une balise)
' true = entre < et >
Dim deb As Integer = Position
Dim fin As Integer = Position
Dim len As Integer = 0
Dim uris As String
Dim html2 As String = HTML
HTML = HTML.ToLower
Dim i As Integer = 0
uris = Nothing
' Récupère la balise actuel (entre < et >)
Try
i = 0
Do
If HTML.Chars(Position - i) = ">" Then
DANS_UNE_BALISE_tmp1 = False
Exit Do
ElseIf HTML.Chars(Position - i + 1) = "<" Then
deb = Position - i
Exit Do
End If
i += 1
Loop
i = 0
Do
If HTML.Chars(Position + i) = "<" Then
DANS_UNE_BALISE_tmp2 = False
Exit Do
ElseIf HTML.Chars(Position + i - 1) = ">" Then
fin = Position + i
Exit Do
End If
i += 1
Loop
If DANS_UNE_BALISE_tmp1 And DANS_UNE_BALISE_tmp2 Then
len = fin - deb
uris = html2.Substring(deb + ("<").Length, len - ("<").Length)
uris = uris.Replace(Environment.NewLine, "")
DANS_UNE_BALISE = True
Else
DANS_UNE_BALISE = False
End If
Catch
' en fait, s'il y a une erreur, c'est parce que la position du caret se trouve après la fermeture de la toute dernière balise du document ou avant l'ouverture de la toute première balise du document HTML, et donc dans ce cas, le caret n'est pas dans une balise
DANS_UNE_BALISE = False
End Try
If DANS_UNE_BALISE Then
RESULTAT = uris
Else
End If
lillith212
Messages postés1229Date d'inscriptionvendredi 16 novembre 2007StatutMembreDernière intervention16 juin 2009 20 nov. 2008 à 12:38
Bonjour,
<html>
</html>
ça fonctionne, grâce à InStr, par contre, si j'ai la même chose mais dans le sens inverse :
<html>
</html>
ou
<html>
</html>
C'est la même chose que tu as écrit???
Ou peut être que j'ai loupé un truc.
En tout cas :
Description
Renvoie la position d'une occurrence d'une chaîne dans une autre, à partir de la fin de la chaîne.
Syntaxe
InstrRev(string1,string2[,start[,compare]])
La syntaxe de la fonction InstrRev comprend les éléments suivants :
Élément, Description, ----
string1, <object id="alink_4" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>Expression de chaîne dans laquelle la recherche est effectuée., ----
string2, Expression recherchée., ----
start, Facultatif.
<object id="alink_5" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>Expression numérique définissant la position de départ de chaque recherche. Si elle est omise, -1 est employé, ce qui signifie que la recherche commence à la dernière position de caractère. Si l'argument start contient la valeur
<object id="alink_6" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>Null, une erreur se produit., ----
compare, Facultatif. Valeur numérique indiquant le type de comparaison à utiliser lors de l'évaluation des sous-chaînes. Si elle est omise, une comparaison binaire est effectuée. Reportez-vous à la section Valeurs.
Valeurs
L'argument compare prend les valeurs suivantes :
Constante, Valeur, Description, ----
vbUseCompareOption, –1, Effectue une comparaison à l'aide de l'instruction Option Compare., ----
vbBinaryCompare, 0, Effectue une comparaison binaire., ----
vbTextCompare, 1, Effectue une comparaison de texte., ----
vbDatabaseCompare, 2, Microsoft Access seulement. Effectue une comparaison basée sur des informations contenues dans votre base de données.
extrait du msdn...
Le msdn rajoute : Notez que la syntaxe de la fonction InstrRev est différente de celle de la fonction Instr
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 20 nov. 2008 à 06:57
Salut,
Merci, ça fonctionne à présent. Enfin presque :
Maintenant, quand j'ai ça :
<html>
</html>
ça fonctionne, grâce à InStr, par contre, si j'ai la même chose mais dans le sens inverse :
<html>
</html>
ou
<html>
</html>
Et bien on a de nouveau un bug. Normal devrais-je dire, puisque la fonction InStr effectue la recherche quand dans un sens uniquement. J'ai tenté d'utiliser InStrRev, mais ça doit pas être ça
Existe-il une commande pour la faire la même chose mais dans le sens inverse?
cs_veler
Messages postés723Date d'inscriptiondimanche 26 novembre 2006StatutMembreDernière intervention23 janvier 20132 20 nov. 2008 à 15:40
Salut,
C'est bon, tout fonctionne parfaitement à présent, je m'étais trompé dans les arguments à mettre dans InStrRev.
Merci beaucoup, je ne connaissait pas cette commande, je vais pouvoir l'utiliser ailleur, à des endroits qui utilisent le même système que j'avais fait ici.
PS = oui, tu a loupé un truc, regarde :
si la balise div était séparé par un espace ou autre que < ou >, ça marchait :
<html>
</html>
si la fin de la balise était collé à une autre, ça marchait pas :
<html>
</html>
si le début de la balise était collé à une autre, ça marchait pas non plus :
<html>
</html>
et si tout était collé, ba c'était encore pire :
<html>
</html>
Mais maintenant, quoi qu'il arrive, ça fonctionne, encore merci =D