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

Web Perl Discussion :

Correction automatique de plus de 700 pages html


Sujet :

Web Perl

  1. #41
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Elle servent à savoir où on est : est-on entre "<optgroup label="">" et "</optgroup>" ? est-on dans une option ?
    Par exemple quand tu vois un token de texte, tu dois savoir si tu dois le modifier, pour ce faire tu dois savoir si tu es dans une option ou pas. Et pour les options tu dois savoir si l'optgroup englobant a bien un label vide ou pas (sauf si ça n'a pas d'importance, mais tu l'avais mis dans ton exemple, donc...).
    C'est un peu comme si tu faisais plusieurs boucles : une qui sert lorsque tu es dans un optgroup, une qui sert quand tu es dans une option dans un optgroup.

    C'est une technique classique pour traiter un flux (de token html dans notre cas, mais ça pourrait être n'importe quoi : lignes, caractères, ...), qui s'apparente à une machine à états. C'est souvent très robuste et de plus extrèmement efficace par rapport à la plupart des autres approches.

    --
    Jedaï

  2. #42
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Ok c'est ce qui effleurait mon pauvre cervelet mais le problème c'était le $variable++ ou le $variable--.
    En gros ça signifie juste qu'on est dans ce token/ligne/etc.. si c'est ++ et on en sort si c'est --?

    Si oui j'ai compris c'est super.

  3. #43
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    A l'origine ces variables valent 0 (ou plutôt undef) ce qui est une valeur fausse. ++ est l'opérateur d'incrémentation, donc après le tag de début elles valent 1 qui est vrai. Le -- est la décrémentation, donc elle reviennent à 0 quand on rencontre le tag de fin.
    Ici je suppose que tu n'as qu'une profondeur de optgroup et d'option, mais utiliser le ++ et le -- plutôt que =1 et =0 permet de connaître la profondeur où l'on se trouve dans le cas général (et comme ça coute pas plus cher...).

    --
    Jedai

  4. #44
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Ok et c'est beaucoup plus dur avec HTML:arser?

    Parce que j'arrive pas à installer HTML::TokerParser tandis que HTML:arser y est.

  5. #45
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ce n'est pas beaucoup plus dur avec HTML::Parser, c'est juste une autre logique, peut-être un peu plus dure à comprendre : c'est un système de callback (une fonction est appelée lorsqu'un évènement est déclenché, avec HTML::Parser, les évènements sont les tokens, une fonction est appelé par token rencontré, tu peux lui indiquer quelles fonctions appeler quand tel token est rencontré). Par ailleurs si tu as installé HTML::Parser alors HTML::TokeParser (pas HTML::TokerParser) est déjà installé puisqu'il fait partie de la distribution HTML-Parser.

    --
    Jedaï

  6. #46
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Ah ok je comprends mieux pourquoi ça marchait pas. Bon bah je crois que j'ai quasi plus de questions. Enfin!

  7. #47
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Jedai
    A l'origine ces variables valent 0 (ou plutôt undef) ce qui est une valeur fausse. ++ est l'opérateur d'incrémentation, donc après le tag de début elles valent 1 qui est vrai. Le -- est la décrémentation, donc elle reviennent à 0 quand on rencontre le tag de fin.
    Ici je suppose que tu n'as qu'une profondeur de optgroup et d'option, mais utiliser le ++ et le -- plutôt que =1 et =0 permet de connaître la profondeur où l'on se trouve dans le cas général (et comme ça coute pas plus cher...).

    --
    Jedai
    Plus une verification qu'une question:
    Dans le cas où j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <table id="toto">
       <tr title="tata">
         <td>
           <span class="titi">
         </td>
       </tr>
    ....
    </table>
    Quand tu parles de profondeur, ça veut dire que quand je suis sur le token span mon $In_table= 1, mon $in_tr = 1 et mon $in_td= 1 par exemple?

  8. #48
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Une question cette fois <img /> est traité comme un $type eq 'S' ou 'T'?

  9. #49
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Petitcodeur
    Plus une verification qu'une question:
    Dans le cas où j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <table id="toto">
       <tr title="tata">
         <td>
           <span class="titi">
         </td>
       </tr>
    ....
    </table>
    Quand tu parles de profondeur, ça veut dire que quand je suis sur le token span mon $In_table= 1, mon $in_tr = 1 et mon $in_td= 1 par exemple?
    Oui, mais je voulais plutôt parler de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <li>
    <ul>
      <li>
      <ul> Hello world ! </ul>
      </li>
    </ul>
    </li>
    Quand tu es à " Hello world ! ", $in_li = 2.

    Citation Envoyé par Petitcodeur
    Une question cette fois <img /> est traité comme un $type eq 'S' ou 'T'?
    Regarde la doc du côté de empty_tag .

    --
    Jedaï

  10. #50
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Ah ok, j'ai donc pas de problème lié à une profondeur dans les tags.


    Et pour le <img> c'est plus un <img src="source" alt="toto"/> c'est juste que y'a un truc dans la doc du HTML::TokeParser sur cpan qui me fait douter:

    $p->get_text( @endtags )

    [...]
    The text might span tags that should be textified. This is controlled by the $p->{textify} attribute, which is a hash that defines how certain tags can be treated as text. If the name of a start tag matches a key in this hash then this tag is converted to text. The hash value is used to specify which tag attribute to obtain the text from. If this tag attribute is missing, then the upper case name of the tag enclosed in brackets is returned, e.g. "[IMG]". The hash value can also be a subroutine reference. In this case the routine is called with the start tag token content as its argument and the return value is treated as the text.
    The default $p->{textify} value is:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     {img => "alt", applet => "alt"}
    This means that <IMG> and <APPLET> tags are treated as text, and that the text to substitute can be found in the ALT attribute.
    Mais en fait ça a peut-être aucun rapport.

    Je teste mon fichier et après je mets un Tag résolu

  11. #51
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Bon bah j'ai un problème
    Lors de la compilation, pas d'erreures.
    Quand je fais tourner ma fonction modif.

    j'ai une erreur Software:
    Not an array reference line 76.

    et voici mon code autour de cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $p = HTML::TokeParser ->new($File::Find::Name);
    my ($in_optgroup, $in_option);
    while( my $tok= $p ->get_token() ) {
       my $type = $p->[0];   #<<<<ligne 76

    En gros j'ai repris le code de Jedai par contre là j'avoue être complètement paumé.
    edit:
    Bon j'ai trouvé comme un grand, en fait c'est
    my$type = $tok->[0]; qu'il faut mettre

  12. #52
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Petitcodeur
    Bon bah j'ai un problème
    Lors de la compilation, pas d'erreures.
    Quand je fais tourner ma fonction modif.

    j'ai une erreur Software:
    Not an array reference line 76.

    et voici mon code autour de cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $p = HTML::TokeParser ->new($File::Find::Name);
    my ($in_optgroup, $in_option);
    while( my $tok= $p ->get_token() ) {
       my $type = $p->[0];   #<<<<ligne 76

    En gros j'ai repris le code de Jedai par contre là j'avoue être complètement paumé.
    Oups...

    J'ai mis $p au lieu de $tok dans toute la boucle... Fais un rechercher remplacer de $p par $tok dans la boucle (pas dans la condition du while).

    --
    Jedaï

  13. #53
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Bon bah j'ai le dernier problème et après je peux mettre un Tag résolu. Mais là je bloque complètement. J'ai mal compris un ou plusieurs trucs surement.



    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
    find(\&modif_tocprincip, "$rep_/toc_pp.html/");
     
    sub modif_tocprincip
    	{
    	open my $old_file, '<', $File::Find::name or die "Can't read      $File::Find::name : $!\n";
    	my($tmp,$tmpname)=tempfile();
    	binmode($tmp, ':crlf');
     
    	print $tmp <<FIN0;	
    	<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    	<html>
    	<head>              
    	<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
    	<title>titi</title>
    	<link rel= "stylesheet"         href="styles/defaut.css"  type="text/css">                                    
    	<link rel="stylesheet" type="text/css" href="styles/style_toc.css">              
    	<script type="text/javascript" src="javascript/_tocI+.js"> </script>             
    	<script type="text/javascript" src="javascript/_notes.js"> </script>
    	<script type="text/javascript" src="javascript/interface_general.js"> </script>
    	</head>
    	<body>
    FIN0
     
            my $p = HTML::TokeParser -> new($File::Find::name);
    	my ($in_optgroup, $in_option);
    	while ( my $tok = $p->get_token() ) {
    		my $type = $tok->[0];
    		# récupérer le code source du token
    		my $text= $tok->[-1];
    		$text = $tok->[-2] if $type eq 'T';
     
    [...]
     
    print {$tmp} $text;
    print $tmp "</body> \n";
    print $tmp	"</html>\n";
     
    close $old_file;
    close $tmp;
     
    unlink( $File::Find::name )
    		 or die "Can't remove the old file : $!\n";
    rename ($tmpname, $File::Find::name)
    		 or die "Can't rename the temp file $tmpname : $!\n";
    }
    Je pensais que ça écrirait dans le bon ordre dans mon fichier tmp, et après juste remplacer avec toc_pp.html.

    Mais là ça me fait un gros mélange et je suis complètement perdu


    edit: je vous montre ce que ça donne :
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    	<html>
    	<head>              
    	<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
    	<title>tata</title>
    	<link rel= "stylesheet"         href="styles/defaut.css"  type="text/css">                                    
    	<link rel="stylesheet" type="text/css" href="styles/style_toc.css">              
    	<script type="text/javascript" src="javascript/_tocI+.js"> </script>             
    	<script type="text/javascript" src="javascript/_notes.js"> </script>
    	<script type="text/javascript" src="javascript/interface_general.js"> </script>
    	</head>
    	<body>
    	<IMG src="images/misc/logo_ses.gif"alt="logo_ministere"/>
    	<a class="nav" href="HTML_tous/Aide_interface.html" target="_blank" title="Aide Interface">Aide Interface</a>
    	<a class="nav" href="HTML_tous/glossaire_ferroviaire.html" title="Glossaire et Sigles"target="_blank" >Glossaire et sigles</a>
     
    TDOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"T<html>T<head>T<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">T<title>T</title>T<link rel= "stylesheet"         href="styles/defaut.css"  type="text/css">T<link rel="stylesheet" type="text/css" href="styles/style_toc.css">T<script type="text/javascript" src="javascript/_tocI+.js">T</script>T<script type="text/javascript" src="javascript/_notes.js">T</script>T<script type="text/javascript" src="javascript/interface_general.js">T</script>T</head>T<body>TT<head>T<meta content="text/html; charset=iso-8859-1"
     http-equiv="Content-Type">T<title>T</title>T<link rel="stylesheet" type="text/css" href="styles/style_toc.css">T<script language="javascript1.1"
    Je comprends pas l'apparition de tous ces T et pourquoi ça boucle comme ça? Bref là je comprend plus rien

  14. #54
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    T'as oublié de fermer ta boucle while après le "print {$tmp} $text;" ? Quel est le contenu du fichier originel ? Mets ton code complet, j'arrive pas à voir ce que tu fais. S'il est vraiment trop long mets-le en attachement.

    --
    Jedaï

  15. #55
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Je t'envoie la pj en mp ou comme ça?

  16. #56
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Mets la en attachement comme je te l'ai dit.

    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. creation automatique de liens dans une page html
    Par arrakis75 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/09/2010, 10h08
  2. scroll automatique ( jscript je suppose) de page html
    Par xini dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2006, 19h17
  3. Réponses: 6
    Dernier message: 12/06/2006, 20h03
  4. Appeller 2 pages HTML ou plus
    Par vins25 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 24
    Dernier message: 06/01/2006, 13h01
  5. [INFO]Génération automatique de pages HTML
    Par GreenJay dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 28/09/2005, 16h29

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