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 Perl Discussion :

Ouvrir un ficher à partir d'un Hyperlien


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut Ouvrir un ficher à partir d'un Hyperlien
    Bonjour,
    j'ai écrit un script Perl que je voudrais compléter.
    Mon script ouvre un document *.html et le parse. Dans ce document *.html il y a certaines lignes contenant des Hyperliens menant à d'autres fichiers se trouvant dans le même dossier d'origine.
    Quelqu'il sait-il comment je pourrais ouvrir ces derniers fichiers uniquement à partir de l'Hyperlien trouvé dans le *.html en cours d'analyse?
    un fragment du html:

    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
     
    <!-- BEGIN BODY ----------------------------------------------------------------------------------->
    <BODY>
     
    <H1>Test results test_can_rxconv.RQ_TORQ_CRSH_GRB</H1>
     
    Package: 20B6_0000208D_179_010_001 A_CAN<BR>
    Test variant: A_CAN<BR>
    Date: 01.10.2013<BR>
    <HR>
     
    <TABLE>
    <TR><TH>Test Name</TH><TH>Description</TH><TH>State</TH></TR>
    <TR class='passed'><TD><A href="test_can_rxconv.RQ_TORQ_CRSH_GRB.DRAW_TORQ_CRSH_GRB.html">test_can_rxconv.RQ_TORQ_CRSH_GRB.DRAW_TORQ_CRSH_GRB</A></TD><TD>Check signal conversion </TD><TD>PASSED</TD></TR>
    <TR class='passed'><TD><A href="test_can_rxconv.RQ_TORQ_CRSH_GRB.ST_RQ_TORQ_GRB.html">test_can_rxconv.RQ_TORQ_CRSH_GRB.ST_RQ_TORQ_GRB</A></TD><TD>Check signal conversion </TD><TD>PASSED</TD></TR>
    <TR class='passed'><TD><A href="test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_RPM_ENG_CRSH_GRB.html">test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_RPM_ENG_CRSH_GRB</A></TD><TD>Check signal conversion </TD><TD>PASSED</TD></TR>
    <TR class='passed'><TD><A href="test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_TORQ_CRSH_FAST.html">test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_TORQ_CRSH_FAST</A></TD><TD>Check signal conversion </TD><TD>PASSED</TD></TR>
    <TR class='passed'><TD><A href="test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_TORQ_CRSH_SLOW.html">test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_TORQ_CRSH_SLOW</A></TD><TD>Check signal conversion </TD><TD>PASSED</TD></TR>
    </TABLE>
    <P>
    <HR>
    <CENTER>Generated by loghtml.pm v1.1.0 on 01.10.2013 10:52:08</CENTER>
     
    <!--___REPLACE_CONTENT___-->

    les Hyperliens à ouvrir sont en rouge!

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    comment ouvres-tu ton premier fichier? Pourquoi ne pourrais-tu pas ouvrir les fichiers dans les liens de la même manière?

    Montre-nous le code pour ouvrir le premier fichier et pour le parser.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Bonsoir,
    comment ouvres-tu ton premier fichier? Pourquoi ne pourrais-tu pas ouvrir les fichiers dans les liens de la même manière?

    Montre-nous le code pour ouvrir le premier fichier et pour le parser.
    Bonjour Lolo,
    ce sera un peu difficile à faire car mon script je le développe au fur et à mesure mais bon... un peu plus d'explications:

    mes fichiers sont des résultats de test sous forme html et sont de trois niveau, tous dans le même répertoire.

    - 1er niveau: un fichier html faisant le listing de toutes les frames du test, donc renfermant les hyperliens qui mènent aux fichiers html de ces frames.

    - 2e niveau: les fichiers html des frames évoquées ci-dessus, renfermant à leur tour des hyperliens pour accéder aux fichiers décrivant les signaux contenus dans les frames.

    - 3e niveau: les html des signaux.

    dans un 1er temps je m'étais attaqué directement au troisième niveau (signaux) en utilisant le chemin d'accès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    opendir (DIR, $DIR) || die ('Error Open $DIR');
    my @files = glob("$DIR/*.*.*.html");
    Je me suis rendu compte que j'ai des infos que j'aimerais récupérer au 2e niveau. Donc je voudrais ramener l'ouverture au 2e niveau (frames).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    opendir (DIR, $DIR) || die ('Error Open $DIR');
    my @files = glob("$DIR/*.*.html");
    ouvrir donc une frame, récupérer quelques infos, ensuite ouvrir tour à tour les fichiers référencés par les Hyperliens et les analyser!

    Donc, comment pourrais-je ouvrir ces fichiers en me basant sur les hyperliens!!?

    Je joins un zip avec les fichiers:

    _Testresult.html est le fichier somme du niveau 1

    test_can_rxconv.AVL_DT_SRT_MOT_1.html est une trame: niveau 2

    test_can_rxconv.AVL_DT_SRT_MOT_1.AVL_REV_MOT_REX est un signal dans la trame ci-dessus: niveau 3
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    en faisant comme ça, je pense que ça doit aller non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach $fichier ( @Liste_Fichier_Niv1 ){  #si tu en as plusieurs
        open(FIC_IN1, $fichier)
        lecture ligne et récup du nom fichier trame
     
        open(FIC_IN_TRAME, $nom_fichier_trame)
        lecture ligne et récup du nom fichier signal
     
        open(FIC_IN_SIGNAL, $nom_fichier_signal)
        lecture ligne et récup des infos souhaitées
    }
    Tu peux également juste récupéré à chaque fois la liste des fichiers à ouvrir et ne pas imbriquer les ouvertures de fichiers

    par contre en regardant ton exemple, il me semble que chaque niveau à une formulation du nom du fichier différente alors si tu les lis tous tu pourrais peut être faire:

    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
    my @liste_fichier=`ls -1 DIR/*html`;
    foreach my $fichier (@liste_fichier){
        $fichier =~ s/[\r\n]+$//;
        if ( $fichier =~ // ){
            Traitement comme un fichier niveau 1
        }
        elsif ( $fichier =~ /test_can_rxconv\.(.*\.){1}html/ ){
            Traitement comme un fichier niveau 2
        }
        elsif ( $fichier =~ /test_can_rxconv\.(.*\.){2}html/ ){
            Traitement comme un fichier niveau 3
        }
        else{
            print "le fichier $fichier n'est pas traite.\n";
        }
    }
    Après j'ai pas réussi à comprendre dans ton explication si il y avait besoin d'avoir un lien entre les 3 niveaux

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    bonjour 6ril23,

    merci d'avoir apporté un élément de réponse!

    Le lien entre les trois niveau existe déjà. Même si manuellement on peut ouvrir indifféremment les fichiers directement depuis le répertoire, on peut aussi le faire en partant de la racine des fichiers (soit depuis le niveau 1 ou deux) Tu peux toujours essayer! A la limite le niveau 1 ne m'intéresse pas.

    en ouvrant au niveau 2, je récupère le résultat du test de la frame en général.
    Si à partir de ce fichier de niveau 2 qui est la trame je peux aussi ouvrir le niveau 3 (qui sont les signaux dans la frame) en utilisant justement les hyperlien qui y sont, je pourrais accéder aux résultats individuels des signaux dans la frame. C'est en fait ce que je voudrais faire.

    En utilisant la méthode que tu suggères c'est un peu limité car si la nomenclature des fichiers est récurrente, les noms même ne le sont pas. ainsi on pourrait avoir autre chose à la place du "test_can_rxconv" ainsi de suite.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    donc aux vues de ces explications, la 1ère solution que je t'ai mis semble être le bonne, c'est à dire d'imbriquer les ouvertures et les traitements

    si tu as besoin d'aide au niveau du code pour sa mise en application, n'hésite pas à revenir

  7. #7
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Voici un exemple de programme. L'ossature est opérationnelle, il ne reste plus qu'à ajouter la fonctionnalité, à savoir l'extraction des infos pertinentes à chaque niveau (dans les fonctions extracteur), et éventuellement leur combinaison (dans les fonctions processeur). Comme tu ne dis pas ce que tu utilises comme bibliothèque d'analyse HTML, j'ai utilisé une simple regexp pour extraire les hyperliens. Ce n'est pas recommandé.

    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
    # -*- Mode: cperl; coding: utf-8; tab-width: 8; indent-tabs-mode: nil; cperl-indent-level: 4 -*-
    # analyse.pl
    use strict;
    use warnings;
    use File::Basename qw(dirname);
     
    my $racine = shift;
    $racine = q{Log_test/_Testresult.html} unless defined $racine;
    my $repertoire = dirname($racine);
    $repertoire .= q{/} if $repertoire;
     
    my @fonctions = (
        { 
    	# profondeur = 0 : racine
    	extracteur => sub { my ($fichier) = @_; return "infos racine extraites de $fichier" },
    	processeur => sub { return [@_] },
        }, 
        {
    	# profondeur = 1 : trames
    	extracteur => sub { my ($fichier) = @_; return "infos trame extraites de $fichier" },
    	processeur => sub { return [@_] },
        },
        {
    	# profondeur = 2 : signaux
    	extracteur => sub { my ($fichier) = @_; return "infos signaux extraites de $fichier" },
    	processeur => sub { return [@_] },
        }
        );
     
    sub hyperliens {
        map { m/<A href="([^\028]*)">/ ? $1 : () } # \028 = q{"}, pour ne pas égarer les coloriseurs de code
        do {local @ARGV = shift; <>};
    }
     
    sub traitement {
        my ($fichier, $profondeur) = @_;
        $profondeur = 0 unless defined($profondeur);
        $fonctions[$profondeur]{processeur}->(
    	$fonctions[$profondeur]{extracteur}->($fichier),
    	map { traitement("$repertoire$_", $profondeur + 1) } hyperliens($fichier));
    }
     
     
    use Data::Dumper;
    print Dumper( traitement($racine) );
    A l'exécution ça donne quelque chose comme
    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
    Taisha:~/tttmp/hyperliens $ perl analyse.pl
    $VAR1 = [
              'infos racine extraites de Log_test/_Testresult.html',
              [
                'infos trame extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.html',
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.DRAW_TORQ_CRSH_GRB.html'
                ],
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.ST_RQ_TORQ_GRB.html'
                ],
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_RPM_ENG_CRSH_GRB.html'
                ],
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_TORQ_CRSH_FAST.html'
                ],
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_TORQ_CRSH_SLOW.html'
                ]
              ],
              [
                'infos trame extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB_2.html',
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB_2.IDX_GRB_DYN.html'
                ],
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB_2.LIM_TORQ_CRSH_GRB_PROTE.html'
                ],
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB_2.ST_TORQ_COMPT_RISE.html'
                ],
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB_2.TAR_MOD_SHFT_DVCH.html'
                ],
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB_2.TORQ_COMPT_RISE.html'
                ]
              ],
              [
                'infos trame extraites de Log_test/test_can_rxconv.DISP_RPM_ENG_DYNS.html',
                [
                  'infos signaux extraites de Log_test/test_can_rxconv.DISP_RPM_ENG_DYNS.AVL_TEMP_GRB.html'
                ],
    ...
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Alors comme je le disais, le gros du travail d'analyse est fait et fonctionne bien, à savoir analyse des fichiers niveau 3!
    voici comment je m'imagine la suite, c'est-à-dire ouvrir les niveaux 2 et user des hyperliens s'y trouvant pour ouvrir les niveaux 3

    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
     
    opendir (DIR, $DIR) || die ('Error Open $DIR');
    my @files = glob("$DIR/*.*.html"); #ouvrir les fichiers de niveau 2 (frame)
     
    foreach (@files)
    {
    	$html_file = $_;
     
    	if(! open (my $readf, $html_file)) # lire un html de niveau 2
    	{
    		Log_Error("Cannot read html file: '$in_file'");
    		die;
    	}
     
    	while (my $line = <$readf>)
    	{	
    		if ($line =~ /marqueur i/)
    		{
    			récupérer quelques infos
    		}
     
     
    		if ($line =~ /href\=/) #lignes contenant des hyperliens
    		{
    #---------(peut-être réaliser ici une boucle afin de lire les lignes contenant les hyperliens)--------
    			open (comment ouvrir fichier caché derrière l'hyperlien);
     
    			if ($line =~ /marqueur j/) # fichier caché derrière l'hyperlien ouvert. on procède à son analyse
    			{
    				analyse; # partie déjà réalisée
    			}
    #---------(fin de boucle)-----------------------------------------------------------------------------
    		}	
     
    	}
    }

    Une autre question qui me taraude et dont j'ai pas trouvé de réponse online, s'agissant des mêmes fichiers html. est-ce que c'est possible lors de l'analyse, de récupérer une info (par exemple le nom d'un signal) de l'afficher (par ex. dans excel) en hyperlien de telle sorte qu'en cliquant dessus qu'on puisse ouvrir le fichier auquel il correspond?

    Ne vous fachez pas si je ose une question dans...une autre.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    Voici un exemple de programme. L'ossature est opérationnelle, il ne reste plus qu'à ajouter la fonctionnalité, à savoir l'extraction des infos pertinentes à chaque niveau (dans les fonctions extracteur), et éventuellement leur combinaison (dans les fonctions processeur). Comme tu ne dis pas ce que tu utilises comme bibliothèque d'analyse HTML, j'ai utilisé une simple regexp pour extraire les hyperliens. Ce n'est pas recommandé.
    Merci Cmcmc,
    je vais y jeter un coup d'oeil demain
    moi aussi, j'au utiliser des regexp car la struture du html était très uniforme et pas complexe!

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par lauvydream Voir le message
    Merci Cmcmc,
    je vais y jeter un coup d'oeil demain
    moi aussi, j'au utiliser des regexp car la struture du html était très uniforme et pas complexe!
    Je n'ai pas regardé en détail ni la problématique posée, ni la complexité des fichiers HTML, mais je signale également que le module WWW::Mechanize n'est pas complexe à utiliser, et est surtout très pratique pour "naviguer".

    My 2 cents.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    Voici un exemple de programme. L'ossature est opérationnelle, il ne reste plus qu'à ajouter la fonctionnalité, à savoir l'extraction des infos pertinentes à chaque niveau (dans les fonctions extracteur), et éventuellement leur combinaison (dans les fonctions processeur). Comme tu ne dis pas ce que tu utilises comme bibliothèque
    Re-bonjour Cmcmc,

    alors je me suis rapidement plongé dans ton bout de script ce matin et je dois avouer que je n'ai pas trop bien compris.

    en prenant exemple de la profondeur 2, où et comment insérais-tu ce bout de script?

    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
     
    if ($line =~ /class='/ and $line =~ /$Inca_Name/ and $line !~ /CAN signal/ and $line !~ /ECU internal resolution/)
    {
    	my %SignalConv;
    	my @SigConv;
    	my $Sig_ConChk;
    	my $Sig_ConCom;
    	my $Bus_Value;
    	my $Ecu_Value;
    	my $deviation;
     
    #-----collect Signal Informations-----------------------------------
    	$regexp = qr				
    	{
    		class='([^']+)'.*?</TD><TD>([^,]+)</TD><TD>.*?<TD>([^,]+)</TD><TD>([^,]+)</TD><TD>([^']+)</TD>
    	}x;  # ENDE Regexp
     
    	($Sig_ConChk, $Bus_Value, $Ecu_Value, $deviation, $Sig_ConCom)= $line =~ $regexp;
     
     
     
    	$SignalConv{'SIGNAL CONVERSION CHECK'} = $Sig_ConChk;
    	$SignalConv{'BUS VALUE'} = $Bus_Value;
    	$SignalConv{'ECU VALUE'} = $Ecu_Value;  
    	$SignalConv{'DEVIATION'} = $deviation;
    	$SignalConv{'SIG. CONVERSION COMMENT'} = $Sig_ConCom;
    	#$SignalConv{'SIGNAL CONVERSION'} = \@SigConv;
     
    	$info_ref = \%SignalConv;
    	push(@data, $info_ref);
    	#push(@array, @data);
    	}

  12. #12
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par lauvydream Voir le message
    Re-bonjour Cmcmc,

    alors je me suis rapidement plongé dans ton bout de script ce matin et je dois avouer que je n'ai pas trop bien compris.

    en prenant exemple de la profondeur 2, où et comment insérais-tu ce bout de script?
    Ton bout de script ne compilant pas chez moi (variables non déclarées notamment) et n'ayant pas envie de me prendre la tête avec tes regexp j'ai pris la liberté de lui substituer le mien, qui extrait assez brutalement le contenu des tables... La seule modification apportée à l'ossature est le remplacement du stub en ligne 25 par extracteur_signaux (définie en fin de script).
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    # -*- Mode: cperl; coding: utf-8; tab-width: 8; indent-tabs-mode: nil; cperl-indent-level: 4 -*-
    # analyse2.pl
    use strict;
    use warnings;
    use File::Basename qw(dirname);
     
    my $racine = shift;
    $racine = q{Log_test/_Testresult.html} unless defined $racine;
    my $repertoire = dirname($racine);
    $repertoire .= q{/} if $repertoire;
     
    my @fonctions = (
        { 
    	# profondeur = 0 : racine
    	extracteur => sub { my ($fichier) = @_; return "infos racine extraites de $fichier" },
    	processeur => sub { return [@_] },
        }, 
        {
    	# profondeur = 1 : trames
    	extracteur => sub { my ($fichier) = @_; return "infos trame extraites de $fichier" },
    	processeur => sub { return [@_] },
        },
        {
    	# profondeur = 2 : signaux
    	extracteur => \&extracteur_signaux, # sub { my ($fichier) = @_; return "infos signaux extraites de $fichier" },
    	processeur => sub { return [@_] },
        }
        );
     
    sub hyperliens {
        map { m/<A href="([^\028]*)">/ ? $1 : () } # \028 = q{"}, pour ne pas égarer les coloriseurs de code
        do {local @ARGV = shift; <>};
    }
     
    sub traitement {
        my ($fichier, $profondeur) = @_;
        $profondeur = 0 unless defined($profondeur);
        $fonctions[$profondeur]{processeur}->(
    	$fonctions[$profondeur]{extracteur}->($fichier),
    	map { traitement("$repertoire$_", $profondeur + 1) } hyperliens($fichier));
    }
     
     
    use Data::Dumper;
    print Dumper( traitement($racine) );
     
    ################################################################################
    sub extracteur_signaux { 
        my ($fichier) = @_;
        my $fulltext = do {local (@ARGV, $/) = $fichier; <> };
        my $data = { origine => $fichier };
        my $tablecnt;
        for ($fulltext) {
          TABLES:
    	while (m{(<TABLE.*?</TABLE>)}msg) {
    	    ++$tablecnt;
    	    my $tabletext = $1;
    	    my $table;
    	    my @headers;
    	    for ($tabletext) {
    		while (m{(<TR[ >].*?</TR>)}msg) {
    		    my $rowtext = $1;
    		    for ($rowtext) {
    		    	if (m{<TH>}) {
    			    push @headers, $1 while m{<TH>(.*?)</TH>}msg;
    		    	} else {
    		    	    my @values;
    		    	    push @values, $1 while m{<TD>(.*?)</TD>}msg;
    		    	    my $h; 
    		    	    @{$h}{@headers} = @values; # merci Philou67430
    		    	    push @$table, $h;
    		    	}
    		    }
    		}
    		$data->{"table_$tablecnt"} = $table;
    	    }
    	}
        }
        return $data;
    }
    Chez moi ç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
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    Taisha:~/tttmp/hyperliens $ perl analyse2.pl
    $VAR1 = [
              'infos racine extraites de Log_test/_Testresult.html',
              [
                'infos trame extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.html',
                [
                  {
                    'origine' => 'Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.DRAW_TORQ_CRSH_GRB.html',
                    'table_1' => [
                                   {
                                     'Test Name' => 'CAN signal',
                                     'State' => 'PASSED',
                                     'Description' => '\'DRAW_TORQ_CRSH_GRB\' available in Inca.'
                                   },
                                   {
                                     'Test Name' => 'ECU internal variable',
                                     'State' => 'PASSED',
                                     'Description' => '\'Com_drTrqCrshGbx_A\' available in Inca.'
                                   }
                                 ],
                    'table_4' => [
                                   {
                                     'Bus Value' => '-1023.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_drTrqCrshGbx_A',
                                     'ECU Value' => '-1023.5',
                                     'Bus Signal' => 'DRAW_TORQ_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '-1023',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_drTrqCrshGbx_A',
                                     'ECU Value' => '-1023',
                                     'Bus Signal' => 'DRAW_TORQ_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '-0.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_drTrqCrshGbx_A',
                                     'ECU Value' => '-0.5',
                                     'Bus Signal' => 'DRAW_TORQ_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '1022',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_drTrqCrshGbx_A',
                                     'ECU Value' => '1022',
                                     'Bus Signal' => 'DRAW_TORQ_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '1023',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_drTrqCrshGbx_A',
                                     'ECU Value' => '1023',
                                     'Bus Signal' => 'DRAW_TORQ_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '1023.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_drTrqCrshGbx_A',
                                     'ECU Value' => '1023.5',
                                     'Bus Signal' => 'DRAW_TORQ_CRSH_GRB'
                                   }
                                 ],
                    'table_3' => [
                                   {
                                     'Physical unit check' => 'Bus signal physical unit (Nm)<BR>ECU internal physical unit (Nm)',
                                     'State' => 'INFO'
                                   }
                                 ],
                    'table_2' => [
                                   {
                                     'State' => 'PASSED',
                                     'Resolution check' => 'ECU internal resolution (Com_drTrqCrshGbx_A=0.5) is equal or higher than bus resolution (DRAW_TORQ_CRSH_GRB=0.5)'
                                   }
                                 ]
                  }
                ],
                [
                  {
                    'origine' => 'Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.ST_RQ_TORQ_GRB.html',
                    'table_1' => [
                                   {
                                     'Test Name' => 'CAN signal',
                                     'State' => 'PASSED',
                                     'Description' => '\'ST_RQ_TORQ_GRB\' available in Inca.'
                                   },
                                   {
                                     'Test Name' => 'ECU internal variable',
                                     'State' => 'PASSED',
                                     'Description' => '\'Com_stTrqGbxDes_A\' available in Inca.'
                                   }
                                 ],
                    'table_4' => [
                                   {
                                     'Bus Value' => '0',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_stTrqGbxDes_A',
                                     'ECU Value' => '0',
                                     'Bus Signal' => 'ST_RQ_TORQ_GRB'
                                   },
                                   {
                                     'Bus Value' => '1',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_stTrqGbxDes_A',
                                     'ECU Value' => '1',
                                     'Bus Signal' => 'ST_RQ_TORQ_GRB'
                                   },
                                   {
                                     'Bus Value' => '7',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_stTrqGbxDes_A',
                                     'ECU Value' => '7',
                                     'Bus Signal' => 'ST_RQ_TORQ_GRB'
                                   },
                                   {
                                     'Bus Value' => '13',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_stTrqGbxDes_A',
                                     'ECU Value' => '13',
                                     'Bus Signal' => 'ST_RQ_TORQ_GRB'
                                   },
                                   {
                                     'Bus Value' => '14',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_stTrqGbxDes_A',
                                     'ECU Value' => '14',
                                     'Bus Signal' => 'ST_RQ_TORQ_GRB'
                                   },
                                   {
                                     'Bus Value' => '15',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_stTrqGbxDes_A',
                                     'ECU Value' => '15',
                                     'Bus Signal' => 'ST_RQ_TORQ_GRB'
                                   }
                                 ],
                    'table_3' => [
                                   {
                                     'Physical unit check' => 'No physical units given',
                                     'State' => 'INFO'
                                   }
                                 ],
                    'table_2' => [
                                   {
                                     'State' => 'PASSED',
                                     'Resolution check' => 'ECU internal resolution (Com_stTrqGbxDes_A=1) is equal or higher than bus resolution (ST_RQ_TORQ_GRB=1)'
                                   }
                                 ]
                  }
                ],
                [
                  {
                    'origine' => 'Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_RPM_ENG_CRSH_GRB.html',
                    'table_1' => [
                                   {
                                     'Test Name' => 'CAN signal',
                                     'State' => 'PASSED',
                                     'Description' => '\'TAR_RPM_ENG_CRSH_GRB\' available in Inca.'
                                   },
                                   {
                                     'Test Name' => 'ECU internal variable',
                                     'State' => 'PASSED',
                                     'Description' => '\'Com_nGbxCrsh_A\' available in Inca.'
                                   }
                                 ],
                    'table_4' => [
                                   {
                                     'Bus Value' => '0',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_nGbxCrsh_A',
                                     'ECU Value' => '0',
                                     'Bus Signal' => 'TAR_RPM_ENG_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '2.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_nGbxCrsh_A',
                                     'ECU Value' => '2.5',
                                     'Bus Signal' => 'TAR_RPM_ENG_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '5112.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_nGbxCrsh_A',
                                     'ECU Value' => '5112.5',
                                     'Bus Signal' => 'TAR_RPM_ENG_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '10222.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_nGbxCrsh_A',
                                     'ECU Value' => '10222.5',
                                     'Bus Signal' => 'TAR_RPM_ENG_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '10227.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_nGbxCrsh_A',
                                     'ECU Value' => '10227.5',
                                     'Bus Signal' => 'TAR_RPM_ENG_CRSH_GRB'
                                   },
                                   {
                                     'Bus Value' => '10230',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_nGbxCrsh_A',
                                     'ECU Value' => '10230',
                                     'Bus Signal' => 'TAR_RPM_ENG_CRSH_GRB'
                                   }
                                 ],
                    'table_3' => [
                                   {
                                     'Physical unit check' => 'Bus signal physical unit (1/min)<BR>ECU internal physical unit (1/min)',
                                     'State' => 'INFO'
                                   }
                                 ],
                    'table_2' => [
                                   {
                                     'State' => 'PASSED',
                                     'Resolution check' => 'ECU internal resolution (Com_nGbxCrsh_A=2.5) is equal or higher than bus resolution (TAR_RPM_ENG_CRSH_GRB=2.5)'
                                   }
                                 ]
                  }
                ],
                [
                  {
                    'origine' => 'Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_TORQ_CRSH_FAST.html',
                    'table_1' => [
                                   {
                                     'Test Name' => 'CAN signal',
                                     'State' => 'PASSED',
                                     'Description' => '\'TAR_TORQ_CRSH_FAST\' available in Inca.'
                                   },
                                   {
                                     'Test Name' => 'ECU internal variable',
                                     'State' => 'PASSED',
                                     'Description' => '\'Com_trqGbxDes_A\' available in Inca.'
                                   }
                                 ],
                    'table_4' => [
                                   {
                                     'Bus Value' => '-1023.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxDes_A',
                                     'ECU Value' => '-1023.5',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_FAST'
                                   },
                                   {
                                     'Bus Value' => '-1023',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxDes_A',
                                     'ECU Value' => '-1023',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_FAST'
                                   },
                                   {
                                     'Bus Value' => '-0.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxDes_A',
                                     'ECU Value' => '-0.5',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_FAST'
                                   },
                                   {
                                     'Bus Value' => '1022',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxDes_A',
                                     'ECU Value' => '1022',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_FAST'
                                   },
                                   {
                                     'Bus Value' => '1023',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxDes_A',
                                     'ECU Value' => '1023',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_FAST'
                                   },
                                   {
                                     'Bus Value' => '1023.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxDes_A',
                                     'ECU Value' => '1023.5',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_FAST'
                                   }
                                 ],
                    'table_3' => [
                                   {
                                     'Physical unit check' => 'Bus signal physical unit (Nm)<BR>ECU internal physical unit (Nm)',
                                     'State' => 'INFO'
                                   }
                                 ],
                    'table_2' => [
                                   {
                                     'State' => 'PASSED',
                                     'Resolution check' => 'ECU internal resolution (Com_trqGbxDes_A=0.5) is equal or higher than bus resolution (TAR_TORQ_CRSH_FAST=0.5)'
                                   }
                                 ]
                  }
                ],
                [
                  {
                    'origine' => 'Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB.TAR_TORQ_CRSH_SLOW.html',
                    'table_1' => [
                                   {
                                     'Test Name' => 'CAN signal',
                                     'State' => 'PASSED',
                                     'Description' => '\'TAR_TORQ_CRSH_SLOW\' available in Inca.'
                                   },
                                   {
                                     'Test Name' => 'ECU internal variable',
                                     'State' => 'PASSED',
                                     'Description' => '\'Com_trqGbxMax_A\' available in Inca.'
                                   }
                                 ],
                    'table_4' => [
                                   {
                                     'Bus Value' => '-1023.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxMax_A',
                                     'ECU Value' => '-1023.5',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_SLOW'
                                   },
                                   {
                                     'Bus Value' => '-1023',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxMax_A',
                                     'ECU Value' => '-1023',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_SLOW'
                                   },
                                   {
                                     'Bus Value' => '-0.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxMax_A',
                                     'ECU Value' => '-0.5',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_SLOW'
                                   },
                                   {
                                     'Bus Value' => '1022',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxMax_A',
                                     'ECU Value' => '1022',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_SLOW'
                                   },
                                   {
                                     'Bus Value' => '1023',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxMax_A',
                                     'ECU Value' => '1023',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_SLOW'
                                   },
                                   {
                                     'Bus Value' => '1023.5',
                                     'State' => 'PASSED',
                                     'Deviation' => '0',
                                     'ECU Variable' => 'Com_trqGbxMax_A',
                                     'ECU Value' => '1023.5',
                                     'Bus Signal' => 'TAR_TORQ_CRSH_SLOW'
                                   }
                                 ],
                    'table_3' => [
                                   {
                                     'Physical unit check' => 'Bus signal physical unit (Nm)<BR>ECU internal physical unit (Nm)',
                                     'State' => 'INFO'
                                   }
                                 ],
                    'table_2' => [
                                   {
                                     'State' => 'PASSED',
                                     'Resolution check' => 'ECU internal resolution (Com_trqGbxMax_A=0.5) is equal or higher than bus resolution (TAR_TORQ_CRSH_SLOW=0.5)'
                                   }
                                 ]
                  }
                ]
              ],
              [
                'infos trame extraites de Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB_2.html',
                [
                  {
                    'origine' => 'Log_test/test_can_rxconv.RQ_TORQ_CRSH_GRB_2.IDX_GRB_DYN.html',
                    'table_1' => [
                                   {
                                     'Test Name' => 'CAN signal',
                                     'State' => 'PASSED',
                                     'Description' => '\'IDX_GRB_DYN\' available in Inca.'
                                   },
    ...
    Je te laisse contrôler que c'est correct (je n'ai rien vérifié...) et l'adapter à tes besoins
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  13. #13
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Une variante, qui isole la fonctionnalité d'extraction de table, et qui te facilitera, si tu le désires, l'ajout dans extracteur_signaux d'autres processus de capture (les <h2> par exemple).

    Le reste du code n'est pas touché. Le résultat est identique au bit près à celui de la version précédente.

    J'ai inversé la mécanique d'extraction des données des tables et ajouté l'indépendance à la casse. Le mécanisme est le même mais on utilise map au lieu de foreach.
    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
    46
    47
    48
    49
    50
    51
    52
    53
    ################################################################################
    sub extracteur_signaux {
        my ($fichier) = @_;
        my $fulltext = do { local (@ARGV, $/) = $fichier; <> };
        die "fichier '$fichier' absent ou vide" unless $fulltext;
        my $data = extracteur_tables($fulltext);
        # ajouter ici d"autres informations extraites de $fulltext
        $data->{ origine } = $fichier;
        return $data;
    }
     
    # extraction du contenu de tables HTML simples (voir limitations ci
    # dessous) contenues dans la chaîne passée en paramètre.
    #
    # renvoie une référence à un hash dont les clés sont table_1, table_2,
    # etc, dans l'ordre d'apparition dans la chaîne, et les valeurs la table
    # correspondante à la position indiquée, sous la forme d'une référence à
    # une table de hashes, à raison d'un hash par ligne excepté celle
    # d'entête, et dont les éléments sont nom_de_colonne => valeur.
    #
    # ce n'est pas particulièrement efficace mais le principe est simple :
    # on itère sur les tables, pour chaque table on itère sur les lignes, et
    # pour chaque ligne, si c'est une ligne d'entête on capture les noms de
    # colonnes, et sinon on crée le hash pour cette ligne.
    #
    # limitations :
    # - ne supporte pas les tables imbriquées
    # - ne supporte pas les rowspan/colspan
    # - une ligne d'entête doit précèder les lignes valeurs
    # - tous ls <TH> (resp. <TD>) doivent être présents
    # - la détection d'entête est sommaire (m{TH}ims).
    # - et toutes celles que j'ai oubliées :)
     
    sub extracteur_tables {
        my ($fulltext) = @_;
        my $tablecnt = 0;
        my %data = map {
    	++$tablecnt;
    	my @headers;
    	my @table = map {
    	    my $h;
    	    if (m{<TH>}ims) {
    		@headers = m{<TH>(.*?)</TH>}imsg;
    	    } else {
    		die "pas d'entêtes trouvés pour la table N° $tablecnt" unless @headers;
    		@{$h}{@headers} = m{<TD>(.*?)</TD>}imsg;
    	    }
    	    $h || ();
    	} m{(<TR.*?</TR>)}imsg;
    	"table_$tablecnt" => \@table
        } $fulltext =~ m{(<TABLE.*?</TABLE>)}imsg;
        return \%data;
    }
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Salut Cmcmc,

    je viens de t'envoyer un MP mais j'ai l'impression qu'il ca n'a pas été exécuté!

    je voulais savoir comment tu lances ton script que tu m'as proposé pour l'ouverture des hyperliens.
    Sûrement pas en double-cliquant dessus!!?
    je suis sur windows 7

  15. #15
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Il faut passer le nom du fichier principal en paramètre. Si tu ne mets rien il prend par défaut Log_test\_Testresult.html

    Donc par exemple dans une fenêtre de commande, si perl.exe est dans ton PATH, et que analyse2.pl est dans le répertoire courant,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # perl.exe analyse2.pl chemin\vers\_Testresult.html
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Tu es sur Linux?

    moi ça plante à la routine "sub extracteur_signaux" pourtant c'est du copié-collé!

    C:\Users\Desktop\Testautomatisierung\Perl>test_1.pl Log_test\_Testresult.html
    Illegal declaration of anonymous subroutine at C:\Users\Desktop\Testautomatisierung\Perl>test_1.pl line 48.

    C:\Users\Desktop\Testautomatisierung\Perl>

  17. #17
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    non, sous Windows 7 mais avec cygwin, et j'utilise Strawberry Perl.

    Ca ressemble à une typo. Tu as modifié analyse2.pl ? Essaie avec la version attachée (c'est la dernière).

    (edit : je me rends compte que j'ai oublié de corriger le 2 en 4 dans la seconde ligne de commentaire).
    Fichiers attachés Fichiers attachés
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  18. #18
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    Ca ressemble à une typo.
    par exemple si j'ajoute un ; après sub en ligne 48 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sub; extracteur_signaux {
       ^
    ça donne effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Taisha:~/tttmp/hyperliens $ perl -c analyse4.pl
    Illegal declaration of anonymous subroutine at analyse4.pl line 48.
    Taisha:~/tttmp/hyperliens $
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Merci,
    je me suis inspiré de ta réponse pour avoir une nouvelle approche du problème que j'ai à ce jour résolu.
    Désolé de n'avoir pas marqué le sujet à temps comme clos

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

Discussions similaires

  1. ouvrir un ficher a partir de son chemin
    Par Msysteme dans le forum C#
    Réponses: 4
    Dernier message: 24/03/2015, 21h13
  2. Ouvrir un ficher PDF a partir de builder
    Par sofiane_bentayeb dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/01/2007, 13h03
  3. Ouvrir un répertoire à partir d'un formulaire
    Par delphineleclerc1 dans le forum Access
    Réponses: 3
    Dernier message: 21/12/2005, 17h44
  4. Ouvrir un dossier à partir de son chemin
    Par Mr.Gus dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2005, 13h59
  5. ouvrir un CDocument à partir d'un CDialog
    Par loupdeau dans le forum MFC
    Réponses: 4
    Dernier message: 17/05/2005, 14h38

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