Faire une boucle ?

Résolu
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015 - 13 sept. 2013 à 22:54
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015 - 18 sept. 2013 à 23:34
bonsoir,
je souhaiterai extraire d'une source html certain contenus et signalés dans des balises bien précise.Mon code actuel me convient tout a fait mais ne me récupère que la balise en début de page alors qu'il en existe plusieurs ayant le meme nom alors que je veux toute les récupere dans un textbox
dois je faire une boucle ? et comment s'y prendre ?

voici mon code
str1 = "<li class=""item"">"
str2 = "</li>"

s1 = InStr(st + 1, Text16, str1, vbTextCompare)
s2 = InStr(s1 + 1, Text16, str2, vbTextCompare)
If s1 = 0 Or s2 = 0 Or IsNull(s1) Or IsNull(s2) Then
foundstr = Text16

Else
s = s1 + Len(str1)
l = s2 - s
foundstr = Mid(Text16, s, l)

End If
Text16 = foundstr

Par avance merci

5 réponses

jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024 344
Modifié par jordane45 le 15/09/2013 à 01:02
Bonsoir,

Je me suis dit que vous souhaiteriez peut-être continuer sur le programme que vous avez débutez plutôt que de vous essayer aux expressions régulières (même si je pense que c'est un peu plus "puissant"..).

Bref, en reprenant votre code et en le modifiant un peu, voici ce que ça peut donner :

str1 = "<li class=""item"">"
str2 = "</li>"
s1 = 1
'On boucle tant qu'on trouve des valeurs (S1)
While s1 > 0
    s1 = InStr(s1, Text16, str1, vbTextCompare)
    s2 = InStr(s1 + 1, Text16, str2, vbTextCompare)
    'Si s1 est égale au s1 précédent.. c'est fini !
    If s1 > S1Precedent Then
       If s1 = 0 Or s2 = 0 Or IsNull(s1) Or IsNull(s2) Then
           Debug.Print "Aucune correspondance trouvée"
       Else
           S1Precedent = s1
           s1 = s1 + Len(str1)
           l = s2 - s1
           s2 = s2 + Len(str2)
           foundstr = Mid(Text16, s1, l)
      End If
    'On place le texte trouvé dans une nouvelle variable pour ne pas
    ' Modifier celle que l'on utilise pour le traitement...
    Text17 = Text17 & " " & foundstr
    End If
Wend
Debug.Print Text17
End Sub


Cordialement,
Jordane
1
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015
18 sept. 2013 à 21:45
Merci Jordane :)
0
Bonjour,
Comme jordane45, je me suis dit qu'un bout de code serait le bienvenu. Toutefois, j'ai pris quelques libertés avec le code original. Mais il est évident qu'une boucle est nécessaire pour extraire tous les contenus

On suppose :
1) que tu veux extraire le texte compris entre ces 2 balises.
2) que ces 2 balises existent conjointement.
3) que si ni l'une ni l'autre n'existent, alors tu prends le
texte entier.

    Dim débRech1        As Long
    Dim débRech2        As Long
    Dim s1              As Long
    Dim s2              As Long  	
    
    Dim Balise1         As String 
    Dim Balise2         As String
      
    Dim strpos          As long
    Dim strlen          As Long
 
    Dim nbFound         As Long    
    Dim foundstr()      As String   
   
    Balise1 = "<li class=""item"">" 
    Balise2 = "</li>" 

    Redim founstr(0 to 0)

    débRech1 = 1
    débRech2 = débRech1 + Len(Balise1)

    On démarre la boucle
    Do
       s1 = Instr(débRech1, Text16, Balise1, vbTextCompare)
   
       A ce stade si s1 = 0 c'est que la 1ère balise n'esxiste pas,
       et compte tenu de la supposition no 2,
       ce n'est pas la peine de rechercher la 2ème balise.

       If s1 = 0 then 
         
          En vertu de la supposition no 3, on prend le texte entier  
           
          nbFound = nbFound + 1        
          Redim Preserve foundstr(0 to nbFound)
          foundstr(nbFound) = Text16
         
          La on sort de la boucle 
          Exit Do        
       End if

       s2 = InStr(débRech2, Text16, Balise2, vbTextCompare) 

       strpos = s1 + Len(Balise1)
       strlen = s2 - s1 - Len(Balise1)       

       nbFound = nbFound + 1        
       Redim Preserve foundstr(0 to nbFound)
       foundstr(nbFound) = Mid$(Text16, strpos, strlen) 

       On déplace le début de la recherche suivante
      
       débRech1 = s2 + Len(Balise2)    
       débRech2 = débRech1 + Len(Balise1)

        On boucle sur la recherche suivante
    Loop



Voili. Voilu. Voilou
Cordialement
mJuJu
1
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015
18 sept. 2013 à 21:46
merci a toi :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 16/09/2013 à 13:42
Bonjour,
Moi, je m'en tiens non au code tenté, mais à ce qui a été exprimé : à savoir :
"certain contenus et signalés dans des balises bien précise"
et ma réponse est alors celle-ci :
str1 = "<li class=""item"">"
  str2 = "</li>"
  Text1.Text = ""
  Open "d:essai.html" For Input As #1
   strtext = Input(LOF(1), #1)
  Close #1
  Do While strtext Like "*" & str1 & "*" & str2 & "*"
    pos1 = InStr(strtext, str1) + Len(str1) + 2
    pos2 = InStr(strtext, str2)
    pos3 = pos2 + Len(str2)
    Text1.SelText = Mid(strtext, pos1, pos2 - pos1 - 2) & vbCrLf
    strtext = Mid(strtext, pos3 + 2)
   Loop

la propriété multiline de la textbox devant bien évidemment être mise à True
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
1
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015
18 sept. 2013 à 21:46
et re merci encore
0
jordane45 Messages postés 38178 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 mai 2024 344
14 sept. 2013 à 00:25
Bonjour.
Vous pouvez essayer ça :
http://support.microsoft.com/kb/818802/fr
0

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

Posez votre question
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015
18 sept. 2013 à 21:44
Bonsoir

Merci à tous pour votre aide, grâce a vous j'ai bien avancé sur ma programmation et tout fonctionne a merveille.
J'arrive donc a extraire le contenus de ma page html, a en personnaliser le contenus via des tag ID puis l'afficher sur un webrowser control a default d'une listview que je ne maîtrise pas du tout.

Toutefois je rencontre un petit soucis comment attribuer a un bouton nommé "précédent" et "suivant" la fonction de passer de page en page ?
A savoir qu'au moment de l'extraction du code html je détermine le nombre de page a visualiser grâce a une url présente se terminant par : ?p=2"> pour page2 ?p=3"> page 3 etc ...

Merci à vous
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 sept. 2013 à 22:12
cette nouvelle question n'a plus rien à voir avec celle objet de la présente discussion (extraire d'une source html certain contenus et signalés dans des balises bien précise)
Si la difficulté objet de CETTE discussion a été résolue >>> tag Résolu +++>>> autre discussion.
Merci de te conformer à cette discipline.
0
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015
18 sept. 2013 à 23:34
tres bien merci
0
Rejoignez-nous