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 :

récupération contenu variable


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut récupération contenu variable
    Bonsoir à tous,

    Débutant en Perl depuis 2semaines,je cherche à à copier les données d'un fichier texte (ex: tet.txt qui comporte le nom de l'hôte et le service utilisé séparés par une virgule) pour ensuite les insérer dans un tableau qui enfin permettra de l'envoie de ses données pour une requête SQL. Voici le code :

    fichier.pl
    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
    #!/usr/bin/perl
     use strict;
     #use warnings;
     
    my $element;
    open(FILE,"donnees.txt");
    my @tab=();
     
    while(my $ligne = <FILE>){
            push(@tab,$ligne);
    }
    foreach $element (@tab){
    	my @tab2 = split(",",$element);
            print $tab2[0].":" .$tab2[1].":".$tab2[2];
    }
     
    close(FILE);
    mon second script exécute la requête suivante :
    recup_rrd.pm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT metrics.metric_id as metrique
            FROM index_data, metrics
            WHERE metrics.index_id = index_data.id
            AND index_data.host_name = "$nom_host"
            AND index_data.service_description = "$nom_service_choisie";
    La connexion avec la base de donnée cible est OK, le chargement du module également avec d'autres script. Je cherche a ajouter le contenu des données récupéré dans le fichier texte à la place des variables de critère de cette requête.

    ex: fichier.txt

    supervision,ping
    supervision,traffic

    voilà comment est constitué le fichier texte.
    Je cherche à exécuter la requête autant de fois qu'il y a de ligne.

    Merci et bonne soirée

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    La méthode classique pour faire ça est une requête avec des champs variables, c.a.d avec DBI une écriture du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $sth=$dbh->prepare("select champs FROM table WHERE col1=? AND col2=?");
    Ensuite on exécute la requête autant de fois que nécessaire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sth->execute($valeur1, $valeur2);

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut
    Bonsoir,

    Tout d'abord merci de ta réponse, cela m'a mis sur la voie

    Ensuite j'ai décidé d'y aller simple pour cette fois donc j'ai rassemblé le script dans un seul et même fichier pour le moment, voilà ce à quoi j'en suis arrivé, il y a des choses que je n'ai pas encore saisie comme la notion de tableau en perl, d'où l'erreur que j'obtiens avec @tab2.

    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
    #!/usr/bin/perl
     use strict;
     use warnings;
     use DBI; 
     use RRDs; #on utilise la librairie de rrdtool
    #-------------------------------#
    #Paramètre de connexion à la BDD#
    #-------------------------------#
    my $base = 'centstorage'; #nom de la base
    my $host = '127.0.0.1'; #L'endroit où est stockée la base (localhost)
    my $login = 'user'; #Le login utilisateur
    my $mdp = 'mdp'; #mot de passe de l'utilisateur
    
    #connection à la base de données
    my $dbd = DBI ->connect("dbi:mysql:dbname=$base;host=$host;", $login, $mdp)
    or die "Impossible de se connecter à la base de données :".DBI::errstr;
    #------------------------------------------------------
    my $element;
    my $nom_host;
    my $nom_interface_choisie;
    open(FILE,"data.txt");
    my @tab=();
    #je parcours le fichier et les ajoute à un tableau ligne par ligne
    while(my $ligne = <FILE>){
            push(@tab,$ligne);
    }
    #----------------------------------------------------
    #La requête cible
    
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567
    my $requete_rrd=<<"SQL";
            SELECT metrics.metric_id as metrique
            FROM index_data, metrics
            WHERE metrics.index_id = index_data.id
            AND index_data.host_name = "$nom_host"
            AND index_data.service_description = "$nom_interface_choisie";
    SQL
    #------------------------------------------------------ #je prépare la requête my $prep = $dbd->prepare($requete_rrd) or die $dbd->errstr; #Sachant que tab comporte que 1 cellule occupé(2lignes) #je sépare les éléments de ce tableau qui sont précédé d'une virgule # et je les classe dans le tableau @tab2 foreach $element (@tab){ my @tab2 = split(",",$element); $nom_host = $tab2[0]; $nom_interface_choisie = $tab2[1]; } #pour chaque élément que comporte le tableau @tab2 je les insère dans la #requête sql @tab2[0] correspondant à $nom_host et @tab2[1] $nom_interface_choisie; foreach $element (@tab2) { $prep->execute($nom_host, $nom_interface_choisie)or die "Echec requête : $requete_rrd\n"; #j'affiche le nombre de fichier correspondant au service et l'hôte précisé print "l'interface $nom_interface_choisie possède ", $prep->rows," fichier\n"; #je classe les résultats dans un tableau de hashage while (my $ref_donnees = $prep->fetchrow_hashref ) { push (@tab,$ref_donnees->{metrique}); } my $res = $tab[0]; my $res2 = $tab[1]; #affichage des résultats print "\t- $res\n"; print "\t- $res2\n"; } $prep->finish(); close(FILE);
    Pourrais-tu me dire ce que tu en pense?

    Merci encore et bonne soirée.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Il y a 3 erreurs assez nettes jusqu'à l'execute SQL:
    1) dans la requête SQL, il faut utiliser des points d'interrogation pour les paramètres qui vont être remplacés dynamiquement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	my $requete_rrd=<<"SQL";
            SELECT metrics.metric_id AS metrique
            FROM index_data, metrics
            WHERE metrics.index_id = index_data.id
            AND index_data.host_name = ?
            AND index_data.service_description = ?
    SQL
    Voir la doc de DBI pour plus d'infos.

    2) toute cette boucle est inutile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach $element (@tab){
            my @tab2 = split(",",$element);
     
    	$nom_host = $tab2[0];
            $nom_interface_choisie = $tab2[1];
    }
    car elle remplit des variables qui sont écrasées au tour de boucle suivant sans vraiment être utilisées.

    3) La déclaration my @tab2 à l'intérieur de la boucle implique que @tab2 cesse d'exister à la fin de cette boucle. Or tu essaies de l'utiliser après en faisant le foreach $element (@tab2) . Mais de toute façon il n'y a pas besoin de ce tableau intermédiaire, ça pourrait être simplifié à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach $element (@tab){
      my ($nom_host, $nom_interface) = split(",", $element);
      $prep->execute($nom_host, $nom_interface_choisie)
      .. etc...
    }
    Après l'execute SQL, je ne comprends pas en lisant le code ce que tu cherches à faire.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut
    Bonsoir,

    Encore merci pour l'aide, ensuite pour répondre à ta question, après l’exécute, ce que je cherche à faire est de stocker le résultat de la requête pour ensuite les afficher. En voici l'exemple :

    Les critères de la requête prennent d'abord comme valeur :

    host_name = supervision
    service_description = ping

    et stocke le nom du fichier (résultat de la requête) dans un tableau pour ensuite l'afficher à l'écran.
    Puis la boucle continu pour la seconde ligne

    host_name = supervision
    service_description = traffic

    Résultat :
    Ping : nom du fichier correspondant
    Traffic : nom du fichier correspondant

    Voilà j'espère que j'ai bien pu me faire comprendre
    Et concernant cette partie je cherche toujours comment faire mais je sens que j'en suis pas loin

    Bonne soirée

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut
    Bonjour,

    voilà je bloque sur la sortie des données (metric_id) j'obtiens aucun retour même aucune erreur malgré les modifications, la requête est censé me retourner 2 nom de fichiers par lignes lu dans le fichier .txt
    Cela concerne la partie de couleur orange.

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use DBI;
    use RRDs;    #on utilise la librairie de rrdtool
    
    #-------------------------------#
    #Paramètre de connexion à la BDD#
    #-------------------------------#
    my $base  = 'centstorage';    #nom de la base
    my $host  = '127.0.0.1';      #L'endroit où est stockée la base (localhost)
    my $login = 'user';           #Le login utilisateur
    my $mdp   = 'mdp';           #mot de passe de l'utilisateur
    
    #connection à la base de données
    my $dbd = DBI->connect( "dbi:mysql:dbname=$base;host=$host;", $login, $mdp )
      or die "Impossible de se connecter à la base de données :" . DBI::errstr;
    
    #------------------------------------------------------
    my $tabelement;
    open( FILE, "data.txt" );
    my @tab = ();
    my @tab_donnees = ();
    
    #je parcours le fichier et les ajoute à un tableau ligne par ligne
    while ( my $ligne = <FILE> ) {
        push( @tab, $ligne );
    }
    
    #----------------------------------------------------
    #La requête cible
    my $requete_rrd = <<"SQL";
            SELECT metrics.metric_id as metrique
            FROM index_data, metrics
            WHERE metrics.index_id = index_data.id
            AND index_data.host_name = ?
            AND index_data.service_description = ?;
    SQL
    
    #------------------------------------------------------
    #je prépare la requête
    my $prep = $dbd->prepare($requete_rrd) or die $dbd->errstr;
    
    #je divise chaque ligne en 2 pour stocker le contenu dans
    #chacune des variables déclarées ci-dessous
    foreach $tabelement (@tab) {
        my ( $nom_host, $nom_interface_choisie ) = split( ",", $tabelement );
        $prep->execute( $nom_host, $nom_interface_choisie );
    
    
    }
        #je classe les résultats de la requête  dans un tableau
            while( my ($donnees) = $prep->fetchrow_array){
    	push(@tab_donnees, $donnees);
    	print @tab_donnees;
    
         }
    	
       
    
    #libération du contenu de $prep
    $prep->finish();
    #Fermeture du fichier
    close(FILE);
    #Deconnection de la base de donnée
    $dbd->disconnect;

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

Discussions similaires

  1. [JSP] Frame a contenu variable
    Par christopheJ dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 25/03/2010, 12h18
  2. [C#] Récupération des variables system...
    Par smyley dans le forum Windows Forms
    Réponses: 7
    Dernier message: 04/08/2005, 11h39
  3. [VB.NET] Problem de récupération de variable avec une DLL
    Par ludovic85 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 19/01/2005, 11h37
  4. Récupération de variable
    Par Fred- dans le forum ASP
    Réponses: 13
    Dernier message: 17/06/2004, 20h13
  5. Récupération de variables dynamiques complexes
    Par ludoboy dans le forum ASP
    Réponses: 7
    Dernier message: 24/05/2004, 17h51

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