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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut probème de split
    J'ai un fichier dat, chaque ligne est composée de 4 données séparées par des tabulations.

    Dans le but d'insérer ces données dans une table je voudrais définir que champ1 = donnée1 etc.

    Mais j'ai du mal à le définir ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ($champ1, $champ2, $champ3, $champ4) = split/le néant/$ligne;

  2. #2
    Membre expérimenté Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Par défaut
    si j'ai tout suivit tu veut splite ta chaine par rapport à une tabulation nan ?
    alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    split(/le néant/,$ligne);
    devient
    \t est le code pour une tabulation (comme \n celui pour une fin de ligne et \r un retour chariot)

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Tu devrais faire un chomp($ligne) avant ton split afin de ne pas récupérer le saut de ligne dans ton $champ4

    Sinon, au lieu du split, tu pourrais également utiliser une expression régulière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while ($line = <FICH>){
        if($line =~ /(\w+)\t(\w+)\t(\w+)\t(\w+)/){
            my $champ1 = $1;
            my $champ2 = $2;
            my $champ3 = $3;
            my $champ4 = $4;
        }
    }
    Par exemple, si tu avais des lignes vides entre tes lignes de données, cela éviterait de les sélectionner.

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut
    Merci a vous, j'ai donc essayé ce que tu m'as proposé Jasmine.
    Je début en Perl, donc pas mal de petits soucis...

    J'ai le message d'erreur suivant :

    Can't locate object method "prepare" via package "dbh" (perhaps you forgot to load "dbh"?) at nouveau.pl line 32, <fichier> line 1.

    Voici mon code :

    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
    #!/usr/bin/perl
     
    use DBI;
    use CGI;
     
    $co = new CGI;
    #print $co->header;
     
    $database="arpwatch";
    $hostname="localhost";
    $login="arpwatch";
    $mdp="mdp";
     
    $dsn = "DBI:mysql:database=$database;host=$hostname";
    $dbh = DBI->connect($dsn, $login, $mdp) or die "Echec de connexion";
     
    #ouverture du fichier :
     
    open fichier,"< /collecte/sauveur3-arpwatch.dat" or die "Le fichier n'existe pas !";
     
    while ($ligne = <fichier>)
    {
     
        if($ligne =~ /(\w+)\t(\w+)\t(\w+)\t(\w+)/)
        {
            my $mac = $1;
            my $ip = $2;
            my $epoch = $3;
            my $texte = $4;
        }
    $req = "INSERT INTO titi (mac, ip, epoch, texte) VALUES ($1, $2, $3, $4);";
    $sth = dbh->prepare($req);
    $sth->excute();
     
    }
     
    close (FILE, "/collecte/sauveur3-arpwatch.dat");
     
    $sth->finish;
    $dbh->disconnect;

  5. #5
    Membre expérimenté Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Par défaut
    ligne 32 dbh ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth = dbh->prepare($req);
    devrais etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth = $dbh->prepare($req);
    je suppose

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut
    Je vais reprendre étape par étape, donc avant de faire le lien avec ma db je voudrais seulement faire un affichage classique ...

    J'ai donc :

    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
    #!/usr/bin/perl
     
    #ouverture du fichier :
     
    open fichier,"< collecte/sauveur3-arpwatch.dat" or die "Le fichier n'existe pas !";
     
    while ($ligne = <fichier>)
    {
     
        if($ligne =~ /(\w+)\t(\w+)\t(\w+)\t(\w+)\t(w+)/)
        {
            my $mac = $1;
            my $ip = $2;
            my $epoch = $3;
            my $texte = $4;
        }
        print "MAC: $1 IP: $2 Epoch: $3 Texte: $4\n";
    }
     
    close (FILE, "collecte/sauveur3-arpwatch.dat");
    Plusieurs choses, je viens de m'apercevoir que certaines lignes de mon fichier contiennent 5 données (toujours séparées par des tabulations) bon ça c'est de l'ordre du détail, par contre au niveau de l'affichage ça coince ... je me retrouve avec un affichage du genre :

    MAC: 68 IP: 1211794757 Epoch: pctriax3 Texte: eth1

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

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