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

Langage PHP Discussion :

Analyse de tableau HTML avec nombre variable de cases


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Par défaut Analyse de tableau HTML avec nombre variable de cases
    Bonsoir à tous,

    j'aurais besoin d'un coup de pouce pour la mise en place d'un système de récupération de valeurs provenant d'un tableau ayant la syntaxe suivante:

    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
    <table border=1 style="border-collapse:collapse">
     
    <tr>
    <td XXX>XXX<br>DIM</td><td XXX>XXX<br>LUN</td><td XXX>XXX<br>MAR</td> (....) </tr>
     
     
    <tr>
    <td XXX>1/03</td><td XXX>2/03</td><td XXX>3/03</td> (....) </tr>
     
    <tr><td colspan="31">&nbsp;</td></tr>
     
    <tr>
    <td title='' XXX><font XXX><b>RH</b></font></td><td title='Pause de 13 à 14h' XXX><font XXX><b>9-17</b></font></td><td title='Pause de 13 à 14h' XXX><font XXX><b>9-17</b></font></td> (....) </tr>
     
    <tr><td colspan="31">&nbsp;</td></tr>
    <tr><td colspan="31">&nbsp;</td></tr>
     
     
     
    </table>
    J'ai mis des XXX lorsqu'il y a du contenu mais qu'il ne m'intéresse pas.
    J'ai gardé la mise en forme au cas ou les retours à la ligne auraient une importance.

    Ce qui me pose problème c'est qu'il y a autant de colonne par ligne que de jours dans le mois (il s'agit d'un planning version HTML à l'origine) donc c'est variable.

    Donc ma première question est: faut-il mieux utiliser preg_match ou preg_match_all ?
    je ne sais pas trop comment m'y prendre :S
    j'ai essayé quelque chose pour au moins récupérer les jours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $regexp = '`<table border=1 style="border-collapse:collapse">(?:<tr>(<td(.*)>(.*)<br>(.*)</td>)+</tr>)+(.*)</table>`Us' ;
    preg_match_all($regexp, $parser->page_content, $matches, PREG_SET_ORDER) ;
     
    print_r($matches) ;
    mais un Array ( ) tout vide

    $parser->page_content contient bien la source html ya pas de soucis là dessus.
    quand il s'agit de récupérer une seule information j'y arrive, mais là j'attaque le plus gros et j'avoue me perdre un peu. Je pense que si j'arrive à récupérer la première ligne le reste suivra, mais ce n'est déjà pas le cas donc je suis totalement bloqué.

    Si quelqu'un pouvais m'aider à réaliser cette récupération d'information.
    Merci par avance.

    Cordialement, DD.

  2. #2
    Membre confirmé
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Par défaut
    Re.

    Je suis toujours sur ma quête de récupération des jours, jai tout viré pour tout recommencer et j'essaye d'avancer, mais ma non-maitrise à raison de moi, malgré 2 3 tutos ouverts en permanance >_<

    $regexp = '`<table border=1 style="border-collapse:collapse">.*<tr>(<td.*>.*<br>[A-Z]{3}</td>)+</tr>.*</table>`Usi' ;

    voila mon dernier test, il me faut en faite définir le table car le début <table ...>...<tr> se retrouve ailleurs mais pas avec la meme valeur pour le style.
    ensuite j'essaye de capturer tout les jours dans les td mais ça ne veut pas, rien a faire =(
    jai beau changer les ancres, mettre des parentheses ici et là, ça ne veut pas :S


    si quelqu'un pourrait m'aider,

    Cordialement, DD.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    moi je me tournerai plutot sur la librairie dom de php a mon avis tu gagneras en facilité

    http://php.developpez.com/faq/?page=dom

    http://fr.php.net/manual/fr/domdocum...adhtmlfile.php

    l'avantage c'est que sans rien faire tu te retrouve avec un object structuré sur lequel tu peux travailler

  4. #4
    Membre confirmé Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Par défaut
    salut
    j'ai fait cette expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexp = '#<td .*?>(.*?<br>)?(<font .*?><b>)?([^&nbsp;].*?)(</b></font>)?</td>#' ;
    elle retourne :
    array(9) {
    [0]=>
    string(3) "DIM"
    [1]=>
    string(3) "LUN"
    [2]=>
    string(3) "MAR"
    [3]=>
    string(4) "1/03"
    [4]=>
    string(4) "2/03"
    [5]=>
    string(4) "3/03"
    [6]=>
    string(2) "RH"
    [7]=>
    string(4) "9-17"
    [8]=>
    string(4) "9-17"

    je pense que ça peut t'aider pour démarrer
    après, je pense qu'elle est pas super optimisée avec les (.*?) mais c'est à voir une fois que tu auras réussi à récupérer tes valeurs

  5. #5
    Membre confirmé
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Par défaut
    Bonjour,


    pour le DOMDocument 1and1 ne semble pas avoir loadHTML et loadHTMLFile javais déjà regardé, ça fonctionne en local mais pas chez eux donc jai abandonné l'idée

    Mitaka > jai réutilisé et modifié ton expression, j'arrive à avoir la liste complète des 28 jours de mon mois antérieur de février, j'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$regexp = '#<td .*?>.*?<br>(<font .*?><b>)?([^&nbsp;].*?)(</b></font>)?</td>#' ;

    mais je ne comprend pas comment ça peut récupérer les jours avec cette expression vu qu'ils sont situés entre un <br> et un </td>
    bref je ferais dautres tests ce soir merci à toi en tout cas.

  6. #6
    Membre confirmé Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Par défaut
    salut

    si tu veux récupérer juste les jours de la semaine qui se situe entre ton <br> et ton </td>, tu peux raccourcir l'expression.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexp = '#<td .*?>.*?<br>([^&nbsp;].*?)</td>#' ;

  7. #7
    Membre confirmé
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Par défaut
    salut (et merci de bien vouloir m'aider ^^)

    ça j'avais réussi à avoir juste les jours, mais si tu veux il me faut récupérer 3 <table> correspondant au 3 prochains mois du planning.

    dans chaque table ya la liste des jours, la date et une description.
    donc il me faut faire je pense un preg_match_all avec a l'intérieur des répétitions pour récupérer toute ces infos.


    que je parte de précis et en élargissant, ou en récupérant une zone et en essayant d'affiner pour récupérer des champs précis, je n'y arrive pas =(

    jai testé un logiciel de création de regex pour m'aider, mais meme apres 2h dessus, je ne suis pas assez doué dans ce domaine pour arrivé au résultat escompté =/

  8. #8
    Membre confirmé Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Par défaut
    si tu n'y arrives vraiment pas à tout récupérer d'un coup, je te conseille de faire plusieurs expressions régulières.
    par contre n'en fais pas des tonnes non plus, car cela mange pas mal de mémoire.

  9. #9
    Membre confirmé
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Par défaut
    Bonsoir,


    oui cest ce que jai pensé faire, mais avoir une regex qui match tout mes mois ça aurait été le top c'est pour ça

    avoir un
    array (

    [1](
    [0] > [0]jours
    [0] > [1]dates
    [0] > [2]horaires
    [0] > [3]pauses&commentaires
    [1] > [0]jours
    [1] > [1]dates
    [1] > [2]horaires
    [1] > [3]pauses&commentaires
    ...
    )
    )

    un truc dans le genre, jaurais pu traité et faire un rendu xml beaucoup plus facilement, que devoir récupérer le nombre de jour, ensuite récupéré les correspondants dans les autres array, un peu plus galere >.<

    je recherche toujours mais je n'arrive pas >.<
    je vous tiens au courant si j'avance un peu

    Cordialement, DD.

  10. #10
    Membre confirmé
    Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2004
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2004
    Messages : 88
    Par défaut
    Bonsoir à tous,

    je me permet de redemander votre aide, tout mes tests ne mènent à rien je commence a croire que ce n'est pas possible?

    personne n'a déjà eu a faire à un probleme similaire? meme plus simple?


    bon week end,

    Cordialement, DD.

Discussions similaires

  1. [Tableaux] Imprimer un tableau (HTML) avec Mysql
    Par vandeyy dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2007, 11h23
  2. [SQL] trie colonnes tableau html avec order by
    Par digger dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/05/2007, 16h01
  3. un tableau multidimentionnel avec des variable de type different ?
    Par sebsmax dans le forum Collection et Stream
    Réponses: 25
    Dernier message: 18/01/2007, 14h30
  4. [XSLT] aide pour faire un tableau HTML avec fusion de lignes
    Par utwor dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 02/01/2006, 21h41
  5. [VB6] recuperer des valeurs ds un tableau html avec vb!!
    Par leo13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/12/2004, 13h02

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