|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 918 ![]() |
Bonjour
J'ai un document html qui est constitué de plusieurs tables collées les unes aux autres, du genre Code :
Code :
Pour l'instant, j'ai fait ceci : Code :
|
||||||
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Ceci, peut être:
Code :
|
||
|
|
00
|
|
|
#3 | ||||||||
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 918 ![]() |
Merci, mais j'ai oublié de préciser qu'avant le premier <table , j'ai d'autres éléments que j'ai besoin de conserver.
Le problème est que les balises <table> sont capturées dans le premier élément, alors que j'aimerais qu'elles soient dans le 2è élément. Exemple: Code :
dans toto1 : Code :
dans toto3: Pourtant, dans $patterns = "#(.+<table[^>]*>)(.+)(</table>*)#s"; je n'ai pas mis le modificateur U, et donc j'attendrai plutôt dans toto1 : Code :
Code :
Petite précision : je peux avoir plus de 2 tables bout à bout, sinon le problème serait réglé. C'est pour ça que je veux mettre dans la 2è parenthèse toutes les tables, sauf la première balise <table> et ce qu'il y a avant, et sauf la dernière balise </table> et ce qu'il y a après. Merci aux experts des regexps pour leur aide. |
||||||||
|
|
00
|
|
|
#4 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Bonjour,
Ce document html a-t-il besoin d'être parsé à chaque affichage de la page ? Si oui, pourquoi est-il dans cet état ? Si non, c'est un script planifié que tu veux lancer ? Dans ce dernier cas, je feras plutôt du traitement ligne par ligne avec l'aide flags correctement placés pour effectuer le travail. Du coup, la regexp à trouver est beaucoup plus simple. |
|
|
00
|
|
|
#5 | |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 918 ![]() |
Citation:
Comme excel fait à peu près n'importe quoi au niveau du html pondu (enfin non, disons seulement qu'il n'est pas paramétrable), il faut le parser et le nettoyer. Le processus est : - php génère des variables - php ouvre le fichier template excel - php parse les balises de template pour mettre les variables dans les bonnes cellules - php nettoie le code (mon problème est ici) - php écrit le code dans un fichier temporaire - le navigateur client ouvre le fichier excel. L'intérêt, c'est que j'ai des excels dynamiques en fonction de données en BDD MySQL, très faciles à créer pour qui ne maîtrise pas le HTML. Je me sers de la même fonctionnalité pour l'impression : il faut que mes utilisateurs puissent ouvrir les tableaux de chiffres générés (avec un template excel ou avec d'autres moyens) sous excel pour pouvoir faire leurs petits calculs s'ils en ont envie. Donc là aussi, il faut ouvrir la page dans un excel après un bon nettoyage. Si tu as une idée pour mon problème de balises, je suis preneur ! |
|
|
|
00
|
|
|
#6 | ||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Tu précises que le document ne commance pas par les tables.
Est-ce qu'il y a quelquechose après ? Peut-on envisager une structure de ce style Code :
|
||
|
|
00
|
|
|
#7 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Autre idée : tu dis que tes tables ont chacunes un style.
Peut-il servir de critère de différenciation des balises ? |
|
|
00
|
|
|
#8 | ||
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Citation:
Citation:
Ton problème me paraissait clair dans ton premier post mais maintenant je ne comprends plus grand chose. Le mieux ça serait que tu nous colles un exemple minimal d'un fichier non parsé et de son résultat |
||
|
|
00
|
|
|
#9 | |||
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 918 ![]() |
Citation:
Non, a priori il peut y avoir des données à la fin aussi. Les tables ont chacune un style, mais pas forcément un style simple à décrire (ça peut être 'style=border-top : 1px:', c'est très variable en fonction de la mise en forme que le créateur du tableau a voulu donner) et surtout ni prévisible, ni maîtrisable. En fait, la raison pour laquelle je retire les tables intermédiaires est que lors de l'affichage, excel applique des largeurs automatiques à toutes les cellules dès lors qu'il y a plus d'une table sur la page. Evidemment, j'aimerais bien que les largeur définies restent. |
|||
|
|
00
|
|
|
#10 | |||
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
Tu me corriges, goodpz ? Code :
preg_match('~<table[^>]*>(.+)</table>~is', $str, $a); Code :
$con = preg_replace('~<table[^>]*>|</table>~i', '', $a[1]); Code :
$res = preg_replace('~<table([^>]*)>(?:.+)</table>~is', '<table\1>'.$con.'</table>', $str); Code :
$res = preg_replace('~<table([^>]*)>(.+)</table>~is', $con, $str); Mais on y est presque ! |
|||
|
|
00
|
|
|
#11 | |||
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Citation:
Citation:
Citation:
Mes testes en local quand j'ai écrit le truc hier marchaient bien d'après son exemple donné dans le premier post |
|||
|
|
00
|
|
|
#12 | |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
3) J'avais aussi bien compris le principe, aussi je ne comprends toujours pas le besoin de au lieu de |
|
|
|
00
|
|
|
#13 | |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 918 ![]() |
Citation:
|
|
|
|
00
|
|
|
#14 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
OK, j'ai pigé !
J'y suis presque : ne manquerait-il pas un $ avant le 1 dans le motif de remplacement ? --- edit -- Je répondais à goodpz |
|
|
00
|
|
|
#15 | ||
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Citation:
Si on se contente de remplacer uniquement par $con (qui est le 'contenu' nettoyé), on n'aura plus aucun table dans la page Citation:
Edit: ok tu as pigé ; ) |
||
|
|
00
|
|
|
#16 |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 918 ![]() |
Au fait, merci, je viens de tester et ça marche nickel. Je n'avais pas pensé au stockage temporaire dans $a de preg_match.
Mais je ne comprends pas pourquoi ma version avec callback ne fonctionnait pas |
|
|
00
|
|
|
#17 | |
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Citation:
Lol, commence à être compliquée cette thread ; ) |
|
|
|
00
|
|
|
#18 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Super !
Résolu... |
|
|
00
|
|
|
#19 | |
|
Membre éprouvé
![]() Inscription : février 2007 Messages : 475 ![]() |
Citation:
|
|
|
|
00
|
|
|
#20 |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 918 ![]() |
Comprends toujours pas le coup du greedy : j'ai justement demandé greedy, et j'ai l'impression qu'il n'est pas complètement greedy ! Enfin bon, j'ai 1000 autres problèmes à régler avant de comprendre tout ça.
Merci à vous 2 en tous cas ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com