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

WinDev Discussion :

Lire les lignes d'un fichier .html [WD20]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut Lire les lignes d'un fichier .html
    Bonjour ç tous,

    Je voudrais savoir par quoi je dois commencer afin de réaliser une petite app qui sert à extraire des données existent sur une table dans une page web .html.

    J'ai cherché un peu j'ai trouvé des trucs lié au XML et non pas au HTML.

    Plan :

    - Parcourir les lignes du fichier .html
    - Chercher la table et stocker les <TR> <TD> .. dans une table puis l'extraire dans un fichier XL.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 563
    Par défaut
    Commence par fchargetexte, ensuite il te faudra parcourir la chaîne et trouver les occurrences de la chaîne "<TR><TD>" avec chaineoccurence.

    Ca, ce sont les mots clés de base, ensuite, à toi de te creuser les méninges pour trouver le bon algorithme...

  3. #3
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Commence par fchargetexte, ensuite il te faudra parcourir la chaîne et trouver les occurrences de la chaîne "<TR><TD>" avec chaineoccurence.

    Ca, ce sont les mots clés de base, ensuite, à toi de te creuser les méninges pour trouver le bon algorithme...
    Jusqu'à maintenant j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FichierSélectionné est une chaîne
    FichierSélectionné = fSélecteur("C:\Répertoires", "Fichier.html", ...
    "Sélectionner un fichier", ...
    "Fichier HTML (*.html)" + TAB + "*.html" + RC + "Tous" + TAB + "*.*", "HTML")
    sUrl est une chaîne
     
    sUrl=fChargeTexte(FichierSélectionné)
     
    Info(sUrl)
    et ça affiche le code mais avec le problème des accents.

    Maintenant je vais mettre la condition SI ChaîneOccurrence(sUrl,"<table>Site",SansCasse)>0 ALORS

    Alors tu peux m'aider à trouver le bon algo ?
    Comment peux-je récupérer la ligne ou il a trouvé le " <table>Site "

  4. #4
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 563
    Par défaut
    Une piste, car je n'ai pas le temps de trop gratter, j'ai oublié de te dire qu'il faut regarder avec position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pour i = 1 a chaineoccurence(...)
    pos = postion()...
    // pos contient la ième occurence de la chaine recherchée.
    fin

  5. #5
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Une piste, car je n'ai pas le temps de trop gratter, j'ai oublié de te dire qu'il faut regarder avec position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pour i = 1 a chaineoccurence(...)
    pos = postion()...
    // pos contient la ième occurence de la chaine recherchée.
    fin
    Merci je vais essayer avec le code de #tbc92

  6. #6
    Invité
    Invité(e)
    Par défaut
    Le code HTML, c'est la même chose qu'un code XML, et la méthode proposée précédemment est fortement déconseillée, il faut procéder avec la notion de balise et non de texte, pour trouver votre bonheur, vous pouvez vous servir de la fonction XMLExtraitChaine

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 221
    Par défaut
    Je n'ai pas testé, mais ce code devrait être assez proche de ce qu'il te faut.

    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
     
    po est un entier 
    sep, chlig, ch00 est une chaine 
     
    sep = "<TR><TD>"   // ou peut-être   sep = "</table"  ?  
     
    sUrl=fChargeTexte(FichierSélectionné)
     
    ch00 = sUrl
    po = position(ch00, "<table>", SansCasse )
    tantque po > 0 
        ch00 = ch00[[ po a ]]
        chlig = extraitchaine( ch00,1, sep  ) 
        trace ( chlig ) 
        po = position(ch00, "<table>" , SansCasse )
    fin

  8. #8
    Membre confirmé
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Janvier 2014
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 160
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Je n'ai pas testé, mais ce code devrait être assez proche de ce qu'il te faut.

    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
     
    po est un entier 
    sep, chlig, ch00 est une chaine 
     
    sep = "<TR><TD>"   // ou peut-être   sep = "</table"  ?  
     
    sUrl=fChargeTexte(FichierSélectionné)
     
    ch00 = sUrl
    po = position(ch00, "<table>", SansCasse )
    tantque po > 0 
        ch00 = ch00[[ po a ]]
        chlig = extraitchaine( ch00,1, sep  ) 
        trace ( chlig ) 
        po = position(ch00, "<table>" , SansCasse )
    fin
    Peux-tu m'expliquer la ligne ch00 = ch00[[ po a ]] !!

    Excuse moi mais ce que j'ai compris; ce code permet d'extraire une chaine entre pos et sep.

    comment peux-je préciser la balise que je veux puisque il existe plusieurs balises avec le même nom !

    Ce code ci-dessous je l'ai extrait manuellement pour vous montrer ce que je voulais dans la phase avant dernière :

    Code html : 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
     <tr class="fondAlterne main " id="tr2615805">
                <td class="x-small listingHeight" width="2%">3</td>
                <td colspan="2" title="OT dont le ND a été reçu dans les 30 jours (HERRAS TELECOM / HERRAS CUIVRE / DELEFOSSE Xavier, le 18/04/2017, relevé en PBC). 
    OT ré-injecté. (HERRAS TELECOM / HERRAS CUIVRE / MONNIER HERVE, le 03/05/2017, relevé en ETU, Cause(s) : Autre) 
    OT avec rendez-vous. 
    OT jumelé." align="center"><span class="rouge">30j</span> <span class="rouge">R(A)</span> <span class="orange">RDV</span> <span class="orange">JUM</span></td>
                <td align="center"><span class="badge fondTypeCLT noir">CLT</span></td>
                <td>&nbsp;</td>
                <td align="center">ME1</td>
                <td>10/05/17&nbsp;<span class="x-small">(18/04/17)</span></td>
                <td>18:00</td>
                <td align="center">HEL</td>
                <td align="center">R04&nbsp;/&nbsp;TEL</td>
                <td align="center">P</td>
                <td>0327598335</td>
                <td title="Contact*: 06 16 20 32 21">RLC CLIMBE...</td>
                <td>AMARCS EN B...</td>
                <td align="center" class="nowrap"><span title="Créé le : 03/05/17 12:37*
    Expire le : 03/05/17 13:20" class="vertFonce">LBE</span></td>
                <td align="center" class="nowrap"><span><span class="vertFonce" title="TC2 : 19/04/2017 10:24">TC2</span></span></td>
                <td>
                    <span class="badge fondEtatOTPreAffecte noir">Pré-affecté</span>
                </td>        
            </tr>
     
     
    		<tr class="fondAlterneBis main " id="tr2654502">
                <td class="x-small listingHeight" width="2%">4</td>
                <td colspan="2" title="OT relevé en litige (TH – Gardé suite besoin nacelle). 
    OT dont le ND a été reçu dans les 30 jours (SADE TELECOM / CLT LILLE SADE / SAUCEZ christophe, le 12/05/2017, relevé en FIA). 
    OT avec Garantie de Temps de Relève. 
    OT avec rendez-vous." align="center"><span class="rouge">L(TH)</span> <span class="rouge">30j</span> <span class="rouge">GTR</span> <span class="orange">RDV</span></td>
                <td align="center"><span class="badge fondTypeCLT noir">CLT</span></td>
                <td>FERNANDEZ M. </td>
                <td align="center">EP1</td>
                <td>29/05/17&nbsp;</td>
                <td>14:00</td>
                <td align="center">HEL</td>
                <td align="center">PCC&nbsp;/&nbsp;DGT</td>
                <td align="center">E</td>
                <td>0328729817</td>
                <td title="Contact*: 06 77 17 17 79">ARENDARD FAN...</td>
                <td>LILLE</td>
                <td align="center" class="nowrap"><span title="Créé le : 29/05/17 13:43*
    Expire le : 29/05/17 14:26" class="vertFonce">LED</span></td>
                <td align="center" class="nowrap"><span><span class="vertFonce" title="TC2 : 29/05/2017 14:36">TC2</span></span></td>
                <td>
                    <span class="badge fondEtatOTValideST noir">Validé&nbsp;ST</span>
                </td>         
            </tr>

    Alors j'ai deux balises qui se répètent dans le code :

    <tr class="fondAlterneBis main "
    et
    <tr class="fondAlterne main "

    Je dois extraire de <tr class="fondAlterneBis main " .. jusqu'à </tr> et de <tr class="fondAlterne main " .. </tr>


    et après je dois mettre les <td> dans une table : ME1 - (18/04/17) - 18:00 - HEL - R04&nbsp;/&nbsp;TEL - 0327598335 ....

    Je voudrais juste des idées.

  9. #9
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 228
    Par défaut
    hello,
    comme le disais Romulus on peut se servir des fonctions xml pour traiter un fichier html. D'ailleurs il y a une option dans XmlDocument qui permet de charger un fichier HTML (xdHTML).
    Cependant il peut y avoir des problèmes d'accent ou de caractères spéciaux.
    Voici un exemple qui à partir de ton bout de fichier HTML extrait le contenu des td en utilisant la fonction XMLExecutePath. Dans l'extraction il y a certaines lignes qui sont vides car il y a parfois des span dans tes td.
    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
    // Chargement du fichier HTML
    Mondoc est une chaîne
    Mondoc = fChargeTexte("F:\temp\html_table2.html")
    // Création du document
    XmlDocument("Exemple", Mondoc,xdHTML)
    SI ErreurDétectée = Vrai ALORS
    	Trace(ErreurInfo(errComplet))
    	Erreur("le fichier n'est pas au format  HTML")
    	RETOUR
    FIN
    // balayage du tr avec class = fondAlterne main
    b est un booléen
    Trace("fondAlterne main")
    RequêteXPATH est une chaîne = "//tr[@class=""fondAlterne main ""]/td"
    b = XMLExécuteXPath("Exemple", RequêteXPATH)
    // Est-ce une requête XPath de sélection ?
    SI XMLTrouve("Exemple")=Vrai ALORS
    	// Parcours de la sélection résultat
    	TANTQUE XMLTrouve("Exemple")=Vrai
    		Trace(XMLPosition("Exemple"), " : ",XMLDonnée("Exemple"))
    		XMLSuivant("Exemple")
    	FIN
    	// Parcours terminé, on termine la requête
    	XMLAnnuleRecherche("Exemple")
    FIN
    Trace("===============================================================")
    Trace("fondAlterneBis main ")
    // balayage du tr avec class = fondAlterneBis main 
    RequêteXPATH = "//tr[@class=""fondAlterneBis main ""]/td"
    b = XMLExécuteXPath("Exemple", RequêteXPATH)
    // Est-ce une requête XPath de sélection ?
    SI XMLTrouve("Exemple")=Vrai ALORS
    	// Parcours de la sélection résultat
    	TANTQUE XMLTrouve("Exemple")=Vrai
    		Trace(XMLPosition("Exemple"), " : ",XMLDonnée("Exemple"))
    		XMLSuivant("Exemple")
    	FIN
    	// Parcours terminé, on termine la requête
    	XMLAnnuleRecherche("Exemple")
    FIN
    et voici le résultat :
    Nom : ExtraireHTML.png
Affichages : 1380
Taille : 46,8 Ko

    Ami calmant, J.P

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/11/2015, 17h45
  2. Lire les lignes d'un fichier .txt en HTML
    Par Moustiik78 dans le forum Langage
    Réponses: 10
    Dernier message: 15/03/2014, 02h16
  3. Lire les lignes d'un fichier avec csh
    Par nicolas581 dans le forum Linux
    Réponses: 4
    Dernier message: 24/03/2010, 16h38
  4. [JACOB] Lire les lignes d'un fichier Word
    Par djools45 dans le forum Documents
    Réponses: 2
    Dernier message: 25/05/2007, 15h34
  5. Réponses: 12
    Dernier message: 18/06/2006, 19h42

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