IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Récupérer des données sur une page HTML


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Récupérer des données sur une page HTML
    bonjour,

    je galère pour faire la partie suivante de mon programme. je souhaite aller chercher des données numériques sur une page HTML. elles se trouvent entre les balises BODY et sont disposées comme ci-dessous :

    <body>
    <p>45.23</p>
    <p>46.22</p>
    <p>57.24</p>
    <p>37.02</p>
    </body>

    je souhaite donc récupérer les chiffres entre les balises P et leur affecter un nom de variable utilisable pour toute la suite du programme, par exemple avoir un tableau partant de 1 tel que : a(1)=45.23, a(2)=46.22, a(3)=57.24, a(4)=37.02.
    En fait je souhaite utiliser les données pour faire des calculs et des graphiques donc il me faudrait probablement un tel tableau utilisable dans tout le programme.

    Mais pour ça je galère pas mal alors SVP aidez-moi !

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Pour traiter un cas comme ça, je ferais la chose suivante :

    Déclaration d'un tableau dynamique de type chaîne,
    Ouverture de mon fichier en accès séquentiel (Input),
    Lecture ligne à ligne, avec pour chaque ligne :
    __recherche de la chaîne <p>
    ____si trouvée, recherche de la chaîne </p> et ajout à mon tableau d'une nouvelle valeur obtenue en tronquant la ligne là ou il faut,
    Fermeture du fichier.

    A améliorer un peu si il arrive qu'une balise fermante puisse ne pas se trouver sur la même ligne que la balise ouvrante correspondante !

    Si une étape te pose problème, indique-nous laquelle
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Bonjour,

    Il y a enormement de moyens de faire ça, algorithmiquement, tu peux faire ceci ( je ne vais pas coder le programme correspondant, mais je te donne l'idée ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Initialiser le tableau avec une taille suffisante
    Initialiser le compteur de ton tableau de flottants à 0
    Ouvrir le fichier html
    Boucler sur chaque ligne (séparées par un retour chariot)
        si en début il y a <p>
            Prendre la sous-chaine entre la fin du <p> et le début du </p>
            Transformer cette sous-chaine en flottant
            Ajouter la valeur au tableau
            Incrémenter le compteur
        fin si
    Fin boucle
     
    ' ici tu as donc ton tableau rempli
    K

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    sinon ton fichier html ... il contient autre chose que tes balises... ( tu n'as pas une adresses internet à nous montrer ...)

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    j'ai une suggestion.
    peut-être est-il possible de faire le code HTML sur une seule ligne (c'est-à-dire "coller" toutes les balises les unes aux autres) puis aller chercher tout le code HTML. On l'affecte ensuite à une variable, par exemple codehtml : codehtml = "<html><head>...</head><body>[ici se trouvent les données]</body></html>".
    Puis on va de balise <p> en balise </p> et on récupère les données numériques en les affectant à une variable et ce jusqu'à ce que l'on soit arrivé à la balise </body>.
    Je ne sais pas si c'est faisable...

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    merci KiLVaiDeN, je vais essayer d'écrire le code correspondant.

    j'ai pas d'adresse à donner en exemple puisque ce sera moi qui créerait le site. En fait c'est une simulation mais qui doit impérativement s'appuyer sur une page web.

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par bbil
    sinon ton fichier html ... il contient autre chose que tes balises... ( tu n'as pas une adresses internet à nous montrer ...)
    bah, il n'y a que des balises. C'est une page web toute simple pour ne pas trop compliquer les choses...

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    merci aussi à Xo

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Xo,

    je ne sais pas trop comment faire la lecture ligne à ligne ainsi que tronquer (du moins je ne connais pas les codes).
    Si tu pouvais me donner ne serait-ce qu'un exemple, j'apprécierais.

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tu peu aussi faire appel au controle internet ( rajoute référence à Microsoft internet control et Microsoft Htlm library ...)

    et ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub MajTableau(A() As Single)
     Dim i As Integer
     Dim IE As InternetExplorer
          Set IE = CreateObject("InternetExplorer.Application")
        IE.Visible = True ' On peu mettre false...
     
      Dim t As Date
      IE.Navigate "d:\tmp\toto.html" 'Changer ici l'url...
      t = Now + TimeValue("00:00:30") 'Time-Out De 30 s sur chargement ...
      Do Until IE.ReadyState = READYSTATE_COMPLETE
      DoEvents
        If Now > t Then
          MsgBox "Temps de chargement trop long ", vbCritical
        Exit Sub
        End If
      Loop
     i = 0
     Dim HAC As IHTMLElementCollection
     Dim HA As IHTMLElement
     Set HAC = IE.Document.getElementsByTagName("P")
     For Each HA In HAC
      ReDim Preserve A(i)
     
       A(i) = Val(HA.innerText)
      i = i + 1
     Next
     
     IE.Quit
    End Sub
     
    Sub test()
      Dim A() As Single
      Dim i As Integer
      MajTableau A
      For i = 0 To UBound(A)
        Debug.Print A(i)
      Next
    End Sub

  11. #11
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par rupeni
    je ne sais pas trop comment faire la lecture ligne à ligne ainsi que tronquer (du moins je ne connais pas les codes).
    Si tu pouvais me donner ne serait-ce qu'un exemple, j'apprécierais.
    Avec un TextBox nommé txtFichier qui contient le chemin complert de mon fichier, Ajoute un Button nommé cmdOpen et copie le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Private Sub cmdOpen_Click()
        'Fichier
        Dim canal As Byte
        Dim chaine As String
     
        'Balises et positions
        Dim baliseOuv As String, baliseFin As String
        Dim posDeb As Integer, posFin As Integer
     
        'Valeurs à récupérer
        Dim mesValeurs() As String
        Dim nbVal As Integer
     
        'indice de boucle
        Dim i As Integer
     
        'Initialisation
        baliseOuv = "<p>"
        baliseFin = "</p>"
     
        nbVal = 0
        ReDim mesValeurs(0)
     
        'Ouverture fichier
        canal = FreeFile
        Open txtFichier.Text For Input As #canal
     
        Do While Not EOF(canal)
            'Récupération d'une ligne
            Line Input #canal, chaine
     
            'Traitement
            'Recherche de balise ouvrante :
            posDeb = InStr(chaine, baliseOuv)
     
            'si balise ouvrante détectée :
            If posDeb > 0 Then
                'Recherche de balise fermante :
                posFin = InStr(chaine, baliseFin)
     
                If posFin >= posDeb + Len(posDeb) Then
                    ReDim Preserve mesValeurs(nbVal)
                    mesValeurs(nbVal) = Mid(chaine, posDeb + 3, posFin - posDeb - 3)
                    nbVal = nbVal + 1
                Else
                    'pas de balise fermante
                End If
            End If
        Loop
        Close canal
     
        'Vérification
        For i = 0 To nbVal - 1 'ou Ubound(mesValeurs)
            Debug.Print "A(" & i & ") = " & mesValeurs(i)
        Next i
    End Sub
    J'ai testé ce code avec ton fichier, en rajoutant qq caractères parasites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <body>
    <p>45.23</p>
    <p>46.22</p>
    bla bla <p>57.24</p> bla bla
    <p>37.02</p>
    </body>
    Ce code ne fonctionne pas si une balise fermante n'est pas sur la même ligne qu'une balise ouvrante, mon temps de pause est dépassé
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    ok, merci pour votre aide, je vais travailler ça chez moi ce soir.

Discussions similaires

  1. Récupérer des données d'une page pour les récupérer sur une autre
    Par didpoy dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 17/06/2014, 16h58
  2. Envoyer des données sur une page HTML à partir de Delphi
    Par gillou026 dans le forum Débuter
    Réponses: 18
    Dernier message: 29/05/2013, 01h16
  3. Récupérer des info dans une page html
    Par DORBRITZ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 06/03/2008, 11h13
  4. Réponses: 22
    Dernier message: 29/03/2007, 22h51
  5. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo