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 :

probème de split


Sujet :

Langage Perl

  1. #21
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Dernier détail (oui encore désolé ...), l'affichage est impeccable sur toutes les lignes excepté un truc

    MAC: 0:a0:d1:69:e1:b6 172.22.4.67 IP: 1211452879 Epoch: Texte: eth1 Autre:

    Edit : je suis passé à

    if($ligne =~ /(.*)\t(.*)\t(.*)\t(.*)\t(.*)/)

    ça marche comme ça, toutes les lignes sont bonnes.

    Après ce programme fait dans la précipitation je continuer à étudier le Perl via certains tutos !

    Encore merci

  2. #22
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Une fois mes données récupérées je voudrais enregistrement le tout dans une base de données ... mais je coince au niveau de la requête, je ne vois pas trop quoi mettre dans VALUES ...

    Partie en question :

    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
    $dsn = "DBI:mysql:database=$database;host=$hostname";
    $dbh = DBI->connect($dsn, $login, $mdp) or die "Echec de connexion";
     
    $requete = "INSERT INTO titi (mac, ip, epoch, texte) VALUES ();";
    $sth = $dbh->prepare($requete);
     
    while ($ligne = <fichier>)
    {
    my ($mac, $ip, $epoch, $texte, $autre);
        if($ligne =~ /(.*)\t(.*)\t(.*)\t(.*)\t(.*)/)
        {
            $sth->execute();
        }
        else
        {
            print "Enregistrement impossible\n";
        }
    }
     
    $sth->finish;
    $dbh->disconnect;

  3. #23
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    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
    use strict;  # au début du code
     
    ....
     
    my $dsn = "DBI:mysql:database=$database;host=$hostname";
    my $dbh = DBI->connect($dsn, $login, $mdp) or die "Echec de connexion";
     
    my $ligne;
    while ($ligne = <fichier>)
    {
        if($ligne =~ /(.*)\t(.*)\t(.*)\t(.*)\t.*/)
        {
            my $requete = "INSERT INTO titi (mac, ip, epoch, texte) VALUES ('$1', '$2', '$3', '$4')";
            my $sth = $dbh->prepare($requete) or die "erreur de préparation\n";
            $sth->execute() or die "erreur d'exécution\n";
        }
        else
        {
            print "Enregistrement impossible\n";
        }
    }
    -- Jasmine --

  4. #24
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Merci Jasmine, bon je poursuis dans le même sujet

    Pour qu'un enregistrement soit possible il ne faut pas qu'il y ait un enregistrement dans la table contenant la même mac ip et epoch ...

    donc j'ai déjà fait la condition par la mac, mais pour combiner les trois j'ai du mal ...

    Pour la mac j'ai ça :

    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
    $reqa = "SELECT mac FROM titi;";
    $sth = $dbh->prepare($reqa);
    $sth->execute();
     
    while ($ligne = <fichier>)
    {
    my ($mac, $ip, $epoch, $texte, $autre);
        if($ligne =~ /(.*)\t(.*)\t(.*)\t(.*)\t(.*)/)
        {
                    if($reqa != $1)
                    {
                            $requete = "INSERT INTO titi (mac, ip, epoch, texte) VALUES ('$1', '$2', '$3', '$4');";
                            $sth = $dbh->prepare($requete);
                            $sth->execute();
                    }
                    else
                    {
                    print "Enregistrement déjà présent\n";
                    }
        }
        else
        {
            print "Enregistrement impossible\n";
        }
    }
    Pour combiner les 3 je pensais 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    $reqa = "SELECT mac FROM titi;";
    $sth = $dbh->prepare($reqa);
    $sth->execute();
     
    $reqb = "SELECT ip FROM titi;";
    $sth = $dbh->prepare($reqb);
    $sth->execute();
     
    $reqc = "SELECT epoch FROM titi;";
    $sth = $dbh->prepare($reqc);
    $sth->execute();
     
    while ($ligne = <fichier>)
    {
    my ($mac, $ip, $epoch, $texte, $autre);
        if($ligne =~ /(.*)\t(.*)\t(.*)\t(.*)\t(.*)/)
        {
                    if($reqa != $1, reqb != $2, reqc != $3)
                    {
                            $requete = "INSERT INTO titi (mac, ip, epoch, texte) VALUES ('$1', '$2', '$3', '$4');";
                            $sth = $dbh->prepare($requete);
                            $sth->execute();
                    }
                    else
                    {
                    print "Enregistrement déjà présent\n";
                    }
        }
        else
        {
            print "Enregistrement impossible\n";
        }
    }
    Mais il me réenregistre toutes les lignes une seconde fois, ça coince au niveau du if, mais je ne sais pas comment combiner les 3 conditions).

    Oui le code est sûrement un peu "lourd" pour certains mais je débute et je comprend comme ça pour l'instant

  5. #25
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Pour qu'un enregistrement soit possible il ne faut pas qu'il y ait un enregistrement dans la table contenant la même mac ip et epoch ...
    C'est plus un problème de requête SQl que de langage perl


    Essaie quelque chose de ce genre
    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
    use strict;  # au début du code
     
    ....
     
    my $dsn = "DBI:mysql:database=$database;host=$hostname";
    my $dbh = DBI->connect($dsn, $login, $mdp) or die "Echec de connexion";
     
    my $ligne;
    while ($ligne = <fichier>)
    {
     
        if($ligne =~ /(.*)\t(.*)\t(.*)\t(.*)\t.*/)
        {
            my $mac = $1;
            my $ip = $2;
            my $epoch = $3;
            my $texte = $4;
     
            my $requete_verif = "SELECT * FROM titi WHERE mac = '$mac' OR ip = '$ip' OR epoch = '$epoch' OR texte = '$texte'";
            my $sth_verif = $dbh->prepare($requete_verif) or die "erreur de préparation\n";
            $sth_verif ->execute() or die "erreur d'exécution\n";
            my $rows = $sth_verif->rows;
     
            # si le nombre d'enregistrements récupérés est égal à zéro
            if ($rows == 0){
                my $requete = "INSERT INTO titi (mac, ip, epoch, texte) VALUES ('$mac', '$ip', '$epoch', '$texte')";
                my $sth = $dbh->prepare($requete) or die "erreur de préparation\n";
                $sth->execute() or die "erreur d'exécution\n";
            }
        }
        else
        {
            print "Enregistrement impossible\n";
        }
    }
    -- Jasmine --

  6. #26
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    C'était bien ça, mais j'ai du mal m'exprimer car le résultat souhaité est obtenu avec des AND et non des OR

    Encore merci Jasmine.

  7. #27
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Juste petit truc, avec le même code je me retrouve avec cette erreur :

    Can't call method "finish" on an undefined value at enre.pl line 44, <fichier> line 344.

  8. #28
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Can't call method "finish" on an undefined value at enre.pl line 44, <fichier> line 344.
    Si tu me donnais la ligne 44 de ton code perl cela m'éviterait de devoir fouiller mon armoire à la recherche de ma boule de cristal
    A la ligne 44 de ton script, tu essaies d'appeler la méthode 'finish' sur une variable qui n'a pas été définie. Tu as donc déclarer ta variable mais celle-ci n'a pas été initialisée, elle est 'vide', sans valeur. Cela se passe à la ligne 344 du fichier qui est lu.


    D'ailleurs ce finish me fait penser que tu peux rajouter dans ton code
    et

    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
        if($ligne =~ /(.*)\t(.*)\t(.*)\t(.*)\t.*/)
        {
            my $mac = $1;
            my $ip = $2;
            my $epoch = $3;
            my $texte = $4;
     
            my $requete_verif = "SELECT * FROM titi WHERE mac = '$mac' AND ip = '$ip' AND epoch = '$epoch' AND texte = '$texte'";
            my $sth_verif = $dbh->prepare($requete_verif) or die "erreur de préparation\n";
            $sth_verif ->execute() or die "erreur d'exécution\n";
            my $rows = $sth_verif->rows;
            $sth_verif->finish;
     
            # si le nombre d'enregistrements récupérés est égal à zéro
            if ($rows == 0){
                my $requete = "INSERT INTO titi (mac, ip, epoch, texte) VALUES ('$mac', '$ip', '$epoch', '$texte')";
                my $sth = $dbh->prepare($requete) or die "erreur de préparation\n";
                $sth->execute() or die "erreur d'exécution\n";
                $sth->finish;
            }
        }
    -- Jasmine --

  9. #29
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Tout est ok, merci Jasmine !

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

Discussions similaires

  1. [langage] utilisation de 'split'
    Par mimilou dans le forum Langage
    Réponses: 9
    Dernier message: 24/02/2004, 13h28
  2. [LG]Split qui marche pas
    Par macluvitch dans le forum Langage
    Réponses: 3
    Dernier message: 30/11/2003, 18h19
  3. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  4. Split et calcul de ligne du tableau
    Par La_picolle dans le forum ASP
    Réponses: 6
    Dernier message: 27/08/2003, 15h58
  5. split en xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/03/2003, 10h08

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