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 :

[langage] supprimer une ligne


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Points : 13
    Points
    13
    Par défaut [langage] supprimer une ligne
    Bonjour,

    je souhaiterai supprimer une ligne de mon tableau mais voila mon code fonctionne pas terrible.
    Si vous pouviez m'aider à déterminer mon erreur.

    voici le 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
     
    #!/usr/bin/perl -w 
     
    use strict; 
    use CGI; 
    use Net::Telnet::Cisco; 
     
    #my $q = new CGI;
     
    #my $IP = $q->param('ipSwitch');
     
    my $session = Net::Telnet::Cisco->new(Host => '10.131.0.3',
    					Prompt => '/[A-Za-z\-+_0-9]+#/');
    $session->login('truc', 'xxxx');
     
    # Execute la commande
    my @IP = $session->cmd('show arp');
     
     
    $session->close;
     
    #print "@IP \n";
     
    open (listeIp_Mac ,">../listeIP_Mac.txt") ;
     
    foreach my $ligne (@IP) {
      chomp $ligne;
      next if (!$ligne);
      my $i = "Protocol  Address          Age (min)  Hardware Addr   Type   Interface";
      if ($ligne == $i) {
        next if $i;
      }
      my @liste = split (/\s+/, $ligne); 
      print "$liste[3] $liste[1]\n";
      # Rassemblement des champs intéressant
      print listeIp_Mac "$liste[3] $liste[1]\n";
    }
    close (listeIp_Mac);
    Merci pour votre aide.

  2. #2
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut Re: supprimer une ligne
    Si j'ai bien compris, tu souhaites supprimer les lignes du tableau qui correspondent à ce que tu mets dans $i ?
    Déjà, ton test n'est pas bon. Pour comparer deux chaînes de caractères, on utilise les opérateurs type -eq (equal), -ne (not equal), -gt (greater than), etc.
    Les tests sous la forme ==, !=, >, etc. sont réservés aux numériques.

    Autrement, pourrait-on simplifier juste en ne testant que le début de la ligne, ou le début et la fin par exemple ?
    Car dans ton cas on pourrait grandement simplifier le test, et le rendre ainsi plus lisible, à l'aide d'une expression régulière :

    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
     
    #!/usr/bin/perl -w 
     
    use strict; 
    use CGI; 
    use Net::Telnet::Cisco; 
     
    my $session = Net::Telnet::Cisco->new(Host => '10.131.0.3',
    					Prompt => '/[A-Za-z\-+_0-9]+#/');
    $session->login('truc', 'xxxx');
     
    # Execute la commande
    my @IP = $session->cmd('show arp');
    $session->close;
     
    open (listeIp_Mac ,">../listeIP_Mac.txt") ;
     
    foreach my $ligne (@IP) 
    {
       chomp $ligne;
     
       # Si on ne teste que le début de la ligne :
       next if ( $ligne =~ m/^$/ or $ligne =~ m/^\s*Protocol/ );
       # Mais on peut tester le début et la fin, pourquoi pas :
       #   next if ( $ligne =~ m/^$/ or $ligne =~ m/^\s*Protocol.*Interface\s*$/ );
     
       my @liste = split (/\s+/, $ligne); 
       print "$liste[3] $liste[1]\n";
     
       # Rassemblement des champs intéressant
       print listeIp_Mac "$liste[3] $liste[1]\n";
    }
     
    close (listeIp_Mac);
    Explication rapide :

    Retourne vrai si la ligne est vide.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne =~ m/^\s*Protocol/
    Retourne vrai si :
    - le début de la chaîne (caractère '^' tout au début de l'expression)
    - commence par 0 à n espaces (\s*) suivis par le mot "Protocol".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne =~ m/^\s*Protocol.*Interface\s*$/
    Retourne vrai si :
    - le début de la chaîne (caractère '^' tout au début de l'expression)
    - commence par 0 à n espaces (\s*) suivis par le mot "Protocol"
    - suivi d'un nombre indéfini de n'importe quel caractère (.*)
    - puis du mot "Interface", suivi de 0 à n espaces (\s*), en toute fin de chaîne (caractère '$' en dernière position)
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Bonjour Gamdwin,

    merci encore pour ton aide, je ne sais pas ce que je ferais sans toi.
    Et merci pour tes réponses explicatives.
    Je cherchais comment le faire avec les expressions régulières, mais le truc c'est que je ne pige pas bien encore ces expressions.
    Avec le détails de ta réponses ça devrait aller.


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

Discussions similaires

  1. [langage] Effacer une ligne dans un fichier
    Par sebi77 dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2005, 12h43
  2. [JTable] Supprimer une ligne d'un jtable
    Par Orionmel dans le forum Composants
    Réponses: 5
    Dernier message: 05/11/2004, 22h29
  3. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 16h03
  4. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

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