Transcrire une page HTML dans Delphi - Delphi/Pascal - Programmation
Marsh Posté le 19-04-2011 à 15:33:46
C'est un sacré travail que tu dois faire là. C'est dans quel contexte ? études ou travail pro ? tu dois faire ça pour n'importe quelle page html ?
réécrire un parser de balises en delphi, langage mal adapté au traitement des chaines et meme au xml, c'est vraiment hard-core, voire masochiste.
avec des memo et labels tu pourras simuler des <form> html. mais bon...
bon courage si ce n'est qu'un exercice
Marsh Posté le 19-04-2011 à 16:13:27
Effectivement, je serais curieux de savoir quel est le vrai besoin, le besoin initial. Parce que là, tu exprimes une solution technique qui me semble assez loufoque
C'est clair que c'est un boulot de malade car il ne s'agit pas juste de réécrire un parser de html, y'a aussi le parser du css qui fait le gros de la mise en forme. Faut que tu sois capable de gérer le css1, 2 et 3 (quand on sait que y'a des navigateurs "modernes" qui ne gèrent pas correctement le css3 (voire parfois le 2.1 ).
Marsh Posté le 19-04-2011 à 17:02:52
ça sent le pierre tramouille cette histoire kradeg ? sors de ce pseudo ?
Marsh Posté le 19-04-2011 à 19:35:12
Alors en fait c'est un projet d'école d'ingénieur. Je ne doit être capable que de retranscrire des pages HTML sans déborder sur du CSS ou du Java. Il faudrait juste que le programme retranscrive quelques balises de base : le texte (gros, gras, italique, couleurs,...), le fond, l’entête. Puis plus tard, les tableaux et les images. Il ne s'agit pas de faire un navigateur complet, juste d'entamer la réflexion.
Cela n’empêche que je ne sais pas comment entamer le programme.
Marsh Posté le 20-04-2011 à 09:58:09
Ben un parser html ET css (et c'est pas du java mais du Javascript, ça n'a rien à voir!!!). Si tu prends un site web coder proprement, tu vas trouver dans le html que des balises (aucune mise en forme) et dans le css, toute la mise en page (images de fond, marges, taille des polices, gras, italique...). Si tu dois reproduire la mise en page de base, tu vas donc être obligé d'analyser le ou les css, en tenant compte des héritages et priorités de règles.
ex :
Code :
|
Ben à cause du !important, la règle de p.test sera ignorée...
Et pour rappel, les balises de mise en forme <b>, <i>, center>, <font>, <strike>, <u>... sont dépréciées et on doit utiliser les propriétés css qui les remplacent. Donc si ton prof a dasn l'idée de vous faire parser des sites web avec ce genre de balises, tu lui jettes des pierre de ma part, car ces sites ne respectent ni les normes du W3C, ni l'accessibilité (A, AA, AAA) pour les personnes handicapées visuellement
Marsh Posté le 20-04-2011 à 18:06:06
Après discussion avec mon prof, on doit commencer juste par traduire quelques balises de début, pas une page entière de web.
Le problème que j'ai pour commencer c'est que je ne sais pas comment faire pour que le programme comprenne que c'est une balise et non pas un signe inférieur ou supérieur (< ou > ).
Marsh Posté le 20-04-2011 à 19:48:16
Salut
si tu lit ton code html d'un fichier texte, ça ne gène pas, par ex.tu lis une ligne et tu fait un test avec pos:
var tmp:string; |
dans l'éditeur tu vois que tes <> sont en bleu et pas noir
Marsh Posté le 20-04-2011 à 19:49:12
Salut
si tu lit ton code html d'un fichier texte, ça ne gène pas, par ex.tu lis une ligne et tu fait un test avec pos:
var tmp:string; |
dans l'éditeur tu vois que tes <> sont en bleu et pas noir
Marsh Posté le 20-04-2011 à 20:10:43
J'ai pas réussi à utiliser la commande pos. Pourrais-tu me donner un peu plus de détails ?
Pour l'instant dans mon programme, je récupère mon texte html dans un memo. Maintenant, j'aimerais commencer par lui demander de lire ce qui est marqué dans ce memo et qu'il le reconnaisse.
Code :
|
Le compteur me sert juste à savoir si a bien reconnu le caractère. Sauf que quand je fait du pas à pas, ligne prend bien la valeur <head> mais ne rentre pas dans la boucle. Vous voyez le problème ?
Marsh Posté le 20-04-2011 à 20:18:08
if ligne= '<head>' c'est pas bon parceque tu ne peut rien avoir d'autre sinon la condition est fausse
pour pos justement ça indique que si on trouve '<head>' dans ligne au moins au premier caractère de la chaine c'est bon
begin |
tu peut mettre autre chose que 0 of courses, si tu met 5 il faudra que <head> soit au 5eme caractère
Marsh Posté le 20-04-2011 à 20:19:16
Ok autant pour moi.... Il fallait commencer i à 0... Pas futée la fille...
Marsh Posté le 20-04-2011 à 20:20:04
memo.lines.count -1 aussi
par contre attéssion avec pos il te donne la première occurence de la sous chaine recherchée, si tu cherchais un deuxième <head> dans la meme chaine il faudrait déja supprimer le permier...
Marsh Posté le 20-04-2011 à 20:24:02
Ok nikel pour pos, j'ai compris comment ça marche. Mais maintenant comment je retranscrit ce qu'il y a dans la balise head dans l'inteface delphi ? Memo ? Label ? Je ne sais pas quel entité choisir...
Marsh Posté le 20-04-2011 à 20:29:17
tu peut faire ça avec un richedit, ça permet de mettre pas mal de guirlandes et c'est plus complet qu'un memo
les labels faudrait les créer dynamiquement à chaque fois au bon endroit
Marsh Posté le 20-04-2011 à 20:34:21
Pour prendre une chaîne de caractère entre la balise de début et de fin <head> .... </head>, est ce que l'on peut raisonner par position de la balise par rapport au texte entier ?
Marsh Posté le 20-04-2011 à 20:40:14
roulolo je connais pas le html mais vu tout ce qu'il y a entre tu peut pas, déja t'a ça sur 15000 lignes et en plus t'a tout un tât d'infos à trier quand meme (parser on dit je crois)
si c'est juste sur une chaine tu peut facilement oui pour un lienweb par exemple
Marsh Posté le 21-04-2011 à 10:28:56
Si tu connais pas le html, t'es vraiment très mal parti
Perso, je ne pense pas que passer par la fonction pos() soit une bonne idée. J'utiliserais plutôt les regex, mais attention avec le pb des conteneurs, style <div>...<div>...</div>...</div>, ne pas se tromper dans les balises fermantes, qui ferme quoi et autant que possible traiter les cas où une balise fermante a été oubliée + le coup des balises non conteneur comme <img />, <hr />...
Après, côté structure, il te faut un arbre (comme ce que fait le DOM). Moi, je serais toi, je chercherais un parser XML pas trop strict pour parser le HTML et avoir déjà la structure en arbre. Ca peut être soit un composant Delphi, soit un exe codé dans un autre langage que tu appellerais en ligne de commande et qui d'une manière ou d'une autre te renverrait l'arbre à ton exe en Delphi...
Marsh Posté le 21-04-2011 à 12:33:50
rufo a écrit : Si tu connais pas le html, t'es vraiment très mal parti |
m'en fou c'est pas moi qui doit trouver
c'est vrai que dans le cas <div>...<div>...</div>...</div> avec pos c'est chaud
Marsh Posté le 21-04-2011 à 14:25:07
Flagad'aware a écrit : |
c'est pas toi qui doit trouver quoi Si tu ne connais pas le html (le langage, hein!), comment veux-tu être capable d'écrire un parser et de faire un rendu potable
Marsh Posté le 21-04-2011 à 21:03:22
bah c'est pas moi qui pose la question, je propose juste des possibilités pour aider Miss'cotto
Marsh Posté le 22-04-2011 à 09:41:30
Flagad'aware a écrit : bah c'est pas moi qui pose la question, je propose juste des possibilités pour aider Miss'cotto |
Oops, je t'avais confondu avec l'auteur du topic, désolé
Marsh Posté le 19-04-2011 à 11:35:41
Bonjour
Je doit réaliser un programme sous Delphi afin qu'à partir d'une page HTML je puisse la retranscrire dans l'interface de Delphi. J'ai quelques idées de bases mais je bute sur de nombreux autres problèmes. Pour commencer, j'aimerais bien arriver à transcrire tout ce qui à un rapport avec le texte et le fond de la page, puis plus tard pour les tableaux et les images.
Pour commencer, j'ai récupéré le code pour créer une fiche où l'utilisateur peut rentrer son texte et Delphi le réécrit dans un mémo. Mais maintenant tout le travail commence ! Pour cela je pensais incorporer une bibliothèque de balises où le programme puiserait quand il rencontrerait une balise. Néanmoins, je ne sais pas comment faire pour incorporer ou créer cette bibliothèque ni comment écrire qu'à chaque fois qu'on rencontre une balise, on l'identifie et on la traite.
Ensuite, quels entités utilisés ? Pour l'instant je ne connais que les bases de Delphi et je ne vois pas comment avec des mémos ou des labels je vais pouvoir "écrire" une page HTML.
Bon en gros, je suis perdue...
Est ce que quelqu'un aurait quelques pistes à me donner ?
Merci