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.NET Discussion :

Récupérer données d'un fichier txt (Open Data)


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 31
    Par défaut Récupérer données d'un fichier txt (Open Data)
    J'ai supprimé tous les doublons, donc je repose ma question :


    Je cherche à récupérer certaines données gouvernementales (Open Data) de ce fichier txt en ligne (mis à jour toutes les 10min) :
    http://data.geo.admin.ch.s3.amazonaw...dex/VQHA69.txt

    Pour ensuite les afficher dans Visual Basic de façon propre et actualisé toutes les 10 minutes.

    Si quelqu'un peut m'aider ou me donner une piste car je ne sais pas par où commencer! Je vous en serais reconnaissant.

  2. #2
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Une ébauche...
    avec un WebBrowser, un listbox, un commandbutton

    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
    Dim fso As Object, WS As Object, f, ST$
    Const ForReading = 1, ForWriting = 2
     
    Private Sub Command1_Click()
     
        'affiche la page et enregistre le fichier
        WebBrowser1.Navigate "http://data.geo.admin.ch.s3.amazonaws.com/ch.meteoschweiz.swissmetnet-foehnindex/VQHA69.txt"
        WebBrowser1.Visible = True
        Do While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
            DoEvents
        Loop 'Attend la fin du chargement
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set WS = CreateObject("WScript.Shell")
        Set f = fso.OpenTextFile("C:\Wb.txt", 2, True)
        If WebBrowser1.Busy = False Then
            ST = WebBrowser1.Document.documentElement.innerHTML
            f.Write FindAndWrite(ST)
            f.Close
        End If
     
        'insère les lignes dans la list
        Set f = fso.OpenTextFile("C:\Wb.txt", ForReading)
        While Not f.AtEndOfStream
            List1.AddItem (f.ReadLine)
        Wend
        f.Close
     
    End Sub
     
    Private Function FindAndWrite(sText) As String
     
      Dim Ret$, tb() As String, I%, Trouve As Boolean
      tb = Split(sText, vbNewLine, , vbTextCompare)
      Ret = ""
      Trouve = False
      For I = LBound(tb) To UBound(tb)
        If UCase$(Mid$(tb(I), 1, 5) = "<BODY") Then Trouve = True
         If Trouve Then Ret = Ret + tb(I) + vbNewLine
         If UCase$(Mid$(tb(I), 1, 7) = "</BODY>") Then Exit For
      Next I
      FindAndWrite = Ret
     
    End Function
    A toi de continuer avec ça, il y a surement mieux...

  3. #3
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 137
    Par défaut
    Salut
    Une autre approche, sur un Form, 2 CommandButton, 1 TextBox et 1 Timer.
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Option Explicit
     
    'nécessite d'activer la référence Microsoft Internet Controls
    Dim IE As InternetExplorer
    'nécessite d'activer la référence Microsoft HTML Objects Library
    Dim Doc As HTMLDocument
    Dim AdrssSite As String
     
    Dim DizaineMinutes As Integer
    Dim ExitProg As Boolean
     
    Private Sub Form_Load()
    Timer1.Enabled = False
    Command1.Move 60, 120, 1875, 315
    Command1.Caption = "Scan immédiat"
    Command2.Move 2040, 120, 1875, 315
    Command2.Caption = "Scanner"
    'Text1.ScrollBars = 2 '<-------  A faire en design
    Text1.Move 60, 540, 9015, 5775
    Text1.Text = ""
    Me.Height = 6960: Me.Width = 9405
     
     
    ExitProg = False
    AdrssSite = "http://data.geo.admin.ch.s3.amazonaws.com/ch.meteoschweiz.swissmetnet-foehnindex/VQHA69.txt"
    'Timer1.Interval = 60000 '1 Mn
    Timer1.Interval = 5000 '5 Sc <---- pour la démo ----
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    Timer1.Enabled = False
    ExitProg = True
    If TypeName(Doc) <> "Nothing" Then Doc.Close: Set Doc = Nothing
    If TypeName(IE) <> "Nothing" Then Set IE = Nothing
    End Sub
     
    Private Sub Command2_Click()
    If Timer1.Enabled = True Then
        Command2.Caption = "Scanner"
        Timer1.Enabled = False
        Else
        Command2.Caption = "Scan en cours"
        DizaineMinutes = 0
        RecupInfos
        Timer1.Enabled = True
    End If
    End Sub
    Private Sub Timer1_Timer()
    RecupInfos '<---- A supprimer pour ton cas
    ' 5 lignes à libérer pour ton cas
    'DizaineMinutes = DizaineMinutes + 1
    'If DizaineMinutes = 9 Then
    '    DizaineMinutes = 0
    '    RecupInfos
    'End If
    End Sub
    Private Sub Command1_Click()
    RecupInfos
    End Sub
     
    Private Sub RecupInfos()
    On Error GoTo Gesterr
    Text1.Text = "Connexion ...."
     
    Set IE = New InternetExplorer
    IE.navigate AdrssSite
    Do While IE.readyState <> READYSTATE_COMPLETE
        DoEvents
        If ExitProg = True Then Exit Sub
    Loop
     
    Text1.Text = "Récuperaion du document...."
    Do While IE.document.readyState <> "complete"
        DoEvents
        If ExitProg = True Then Exit Sub
    Loop
     
    Set Doc = IE.document
    Text1.Text = Now & vbNewLine & vbNewLine & Doc.childNodes(1).innerText
     
    Doc.Close: Set Doc = Nothing
    Set IE = Nothing
    Exit Sub
     
    Gesterr:
    If TypeName(Doc) <> "Nothing" Then Doc.Close: Set Doc = Nothing
    If TypeName(IE) <> "Nothing" Then Set IE = Nothing
    Text1.Text = "Probléme inattendu"
    End Sub
    ensuite les afficher dans Visual Basic de façon propre
    Cela devra faire partie d'une autre discussion.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Salut
    Une autre approche, sur un Form, 2 CommandButton, 1 TextBox et 1 Timer.
    Après essais, la version de ProgElecT est vraiment beaucoup plus pro que la mienne

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 31
    Par défaut
    merci beaucoup.

    Je vais regarder ça mais j'ai vais peut-être d'abord passer par une base de donnée. D'ailleurs je vais créer un sujet sur le forum approprié pour demander conseil.

    Encore merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 31
    Par défaut
    Je n'arrive pas à faire fonctionner ton code j'ai pleins d'erreurs de compilation

    Je ferais un screen des erreurs ce week-end, je suis un peu débordé là

  7. #7
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 137
    Par défaut
    Je suppose que cela vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'nécessite d'activer la référence Microsoft Internet Controls
    Dim IE As InternetExplorer
    'nécessite d'activer la référence Microsoft HTML Objects Library
    Dim Doc As HTMLDocument
    Dans le projet, Alt+P --> Alt+R pour faire les références.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 31
    Par défaut
    je vais voir cela mais je n'ai pas trouvé l'objet CommandButton
    J'utilise VB 2013 mais cela ne devrait pas changer grand chose par rapport à VB6 surtout qu'ils n'ont pas dû enlever des fonctions aussi capitales.

  9. #9
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 137
    Par défaut
    Citation Envoyé par Macmachi Voir le message
    je vais voir cela mais je n'ai pas trouvé l'objet CommandButton
    J'utilise VB 2013 mais cela ne devrait pas changer grand chose par rapport à VB6 surtout qu'ils n'ont pas dû enlever des fonctions aussi capitales.
    ben tu n'es pas sur le bon forum.

    Tous les renseignements donnés ici ne te seront pas d'une grande utilité.
    Pourquoi ne pas avoir créé la discussion dans le forum VB.Net (VB Express,VB 2003 et supérieur).
    Tu as un cours super de Philippe Lasserre pour le langage que tu veux pratiquer.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 31
    Par défaut
    Il y a tellement de forums différents concernant visual basic j'ai pris celui qui me paraissait le plus actif.

    Merci pour les tutos je vais regarder.

  11. #11
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    795
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 795
    Par défaut
    Je doute que les développeurs VB.NET apprécient que tu leur dise qu'ils sont moins actifs que les vieux routards de VB6...
    En tout cas, c'était bien envoyé !

  12. #12
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par Aniki Voir le message
    Je doute que les développeurs VB.NET apprécient que tu leur dise qu'ils sont moins actifs que les vieux routards de VB6...
    En tout cas, c'était bien envoyé !
    C'était un beau tacle. (Et au passage, Macmachi ôte-toi tout de suite l'idée que Vb.NET c'est comme VB6, ça n'a rien à voir. (Comme le montre le cours de Plasserre que l'on t'a proposé))

    Sinon Macmachi pour te montrer en exemple, tu as un Form qui contient un WebBrowser et une TextBox :




    Au chargement du Form (Form1_Load), tu dis à ton webbrowser d'aller à cette adresse : http://data.geo.admin.ch.s3.amazonaw...dex/VQHA69.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            WebBrowser1.Navigate("http://data.geo.admin.ch.s3.amazonaws.com/ch.meteoschweiz.swissmetnet-foehnindex/VQHA69.txt")
     
        End Sub

    Et dans l'evenement DocumentCompleted (evenement qui indique que le webbrowser à fini de charger la page web), tu récupères le texte de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
     
            TextBox1.Text = WebBrowser1.Document.Body.InnerText
     
        End Sub

    Ce qui donne comme résultat :




    Dans cet exemple je l'ai placé dans une textbox pour un rendu visible, mais tu peux l'enregistrer dans une variable, une liste, ce que tu veux, pour en faire ce que tu veux.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 31
    Par défaut
    Merci beaucoup pour vos réponses.
    Mais par exemple si je veux récupérer le 23.7 de la station météo ABO (voir sur ton image).

    Je vois pas comment lui dire de mettre que cela dans la variable.

  14. #14
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Tu peux splitter le texte à chaque retour chariot, afin d'avoir un tableau de string qui contient une ligne par item
    Ensuite tu fais ton traitement selon tes critères "ABO" ou autre, et une fois ta ligne trouvée, tu la splittes selon le séparateur "|" qu'ils utilisent et te place à l'index dont tu veux récupérer la valeur (ici index 2 pour la valeur 23.7)

    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
     
            Dim taValeur As String
     
            For Each line As String In WebBrowser1.Document.Body.InnerText.Split(CChar(vbCrLf))
     
                Select Case True
     
                    Case line.Contains("ABO")
     
                        taValeur = line.Split(CChar("|"))(2) 
     
                    Case line.Contains("COM")
     
                        '...
     
                End Select
            Next
     
    msgbox(taValeur) ' retourne 23.7

    EDIT: Mais il n'existe pas une API ou un webservice pour traiter ce genre de fichier ? Parce que là c'est du bidouillage pas top top et pas du tout évolutif ...

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 31
    Par défaut
    Merci je vais testé cela prochainement

    A ma connaissance c'est très délicat à partir d'un fichier texte. Malheureusement c'est le seul format proposé.

    J'aurais préféré du xml

Discussions similaires

  1. [OpenOffice][Base de données] Récupérer les données d'un fichier .txt et les insérer dans une base de données
    Par frack dans le forum OpenOffice & LibreOffice
    Réponses: 9
    Dernier message: 05/08/2009, 11h52
  2. Récupérer données d'un fichier .txt
    Par fredhali2000 dans le forum Langage
    Réponses: 4
    Dernier message: 30/09/2008, 20h28
  3. Récupérer données d'un fichier txt
    Par kakuzu dans le forum Général Java
    Réponses: 6
    Dernier message: 08/04/2008, 16h36
  4. [Tableaux] Récupérer données d'un fichier txt
    Par valouche dans le forum Langage
    Réponses: 5
    Dernier message: 14/02/2008, 10h36

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