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 :

[PERL] élément commun entre un fichier et un tableau


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Par défaut [PERL] élément commun entre un fichier et un tableau
    bonjour, je suis débutante en perl

    j'ai fais un programme de tel sorte qu'il n'affiche que les mots qui sont en commun entre le fichier "test.txt" et le tableau "@name" mais il ne fonctionne pas comme je veux!!
    quad je le compile je n'ai que les mots communs de la première ligne et le début de la 2eme qui s'affichent!! j'ignore pourquoi

    quelqu'un pourrait me mettre sur le chemin??
    je suis perdue!


    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
     
    #!/usr/bin/perl
     
     my  @name= ('ftp', 'http', 'KK', 'gre', 'icmp', 'eigrp', 'ipinip', 'ipsec', 'ospf', 'bgp', 'cuseeme', 'dhcp',
              'dns', 'finger', 'gopher', 'secure-http', 'imap', 'secure-imap', 'irc', 'secure-irc', 'kerberos',
              'l2tp', 'ldap', 'secure-ldap', 'sqlserver', 'netbios', 'nfs', 'nntp', 'secure-nntp', 'notes',
              'ntp', 'pop3', 'secure-pop3', 'pptp', 'rip', 'rsvp', 'smtp', 'snmp', 'socks',
              'ssh', 'syslog', 'telnet', 'secure-telnet', 'secure-ftp', 'xwindows', 'printer', 'novadigm',
              'tftp', 'exchange', 'vdoliv', 'sqlnet', 'rcmd', 'netshow', 'sunrpc', 'streamwork', 'citrix',
              'fasttrack', 'gnutella', 'kazaa2', 'custom01', 'custom02', 'custom03', 'custom04',
              'custom05', 'custom06', 'custom07', 'custom08', 'custom09', 'custom10', 'rtsp', 'rtp',
              'mgcp', 'skinny', 'h323', 'sip', 'rtcp', 'edonkey', 'winmx', 'unknown');
     
     
     
    open(FILE,"<test.txt") or die"open: $!";
    my(@lines,$line,@words,$word,%total); 
    	defined (@lines=<FILE>);
    	my $i=0;
    foreach $line (@lines) {
     
    @words = split( /\W+/, $line );
     
     
     
       foreach $word (@words)
       {
     
     
          $word =~ tr/A-Z/a-z/;
     
          if((lc($name[$i]) eq $word)){
    	  print "$name[$i] \n"; #le noms que je veux afficher
     
    	  }
    	$i++;
         }
     
     
    }
     
    close(FILE);

    et dans mon fichier "test.txt" il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ftp http egp gre icmp eigrp ipinip ipsec ospf bgp cuseeme dhcp
    dns finger gopher secure-http imap secure-imap irc secure-irc kerberos
    l2tp ldap netbios nfs nntp secure-nntp notes ntp pcanywhere pop3 
    secure-pop3 pptp rip rsvp smtp

    je vous remercie

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Je te conseil de rajouter dans ton programme ces 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use warnings;
    use strict;
    Et ensuite de lire notre FAQ pour apprendre à lire les fichiers proprement.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Par défaut
    Salut, je te remercie pour tes conseils mais ça n'a pas changer grand chose!!

    j'ai ajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    use warning;
    use strict;
    on ne m'a pas signaler de problèmes
    et je suis retournée encore une fois vers la FAQ et je n'ai rien trouvé de se qui peu m'aider
    pourrais-tu être plus précis stp?

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Par défaut
    Pour ce qui est d'ouvrir les fichiers correctement, djibril faisait
    référence à foreach $ligne (<FILE>) au lieu de foreach $line (@lines)

    Après tu peux rechercher dans un tableau Perl avec un grep
    la syntaxe est surment pas bonne, mais un truc dans l'idée devrait marcher

    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
     
     
    open(FILE,"<test.txt") or die"open: $!";
    my(@lines,$line,@words,$word,%total); 
    	my $i=0;
     
    foreach $ligne (<FILE>) {
       @words = split( /\W+/, $line );
       foreach $word (@words)
       {
          $word =~ tr/A-Z/a-z/;
     
          print grep {/^$word$/} keys %total;
     
       }
    }
     
    close(FILE);

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    voici un exemple de programme propre :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my @name = (
      'ftp',           'http',       'KK',          'gre',         'icmp',        'eigrp',
      'ipinip',        'ipsec',      'ospf',        'bgp',         'cuseeme',     'dhcp',
      'dns',           'finger',     'gopher',      'secure-http', 'imap',        'secure-imap',
      'irc',           'secure-irc', 'kerberos',    'l2tp',        'ldap',        'secure-ldap',
      'sqlserver',     'netbios',    'nfs',         'nntp',        'secure-nntp', 'notes',
      'ntp',           'pop3',       'secure-pop3', 'pptp',        'rip',         'rsvp',
      'smtp',          'snmp',       'socks',       'ssh',         'syslog',      'telnet',
      'secure-telnet', 'secure-ftp', 'xwindows',    'printer',     'novadigm',    'tftp',
      'exchange',      'vdoliv',     'sqlnet',      'rcmd',        'netshow',     'sunrpc',
      'streamwork',    'citrix',     'fasttrack',   'gnutella',    'kazaa2',      'custom01',
      'custom02',      'custom03',   'custom04',    'custom05',    'custom06',    'custom07',
      'custom08',      'custom09',   'custom10',    'rtsp',        'rtp',         'mgcp',
      'skinny',        'h323',       'sip',         'rtcp',        'edonkey',     'winmx',
      'unknown'
    );
     
    my %mot_a_trouver = map { $_ => 0 } @name;
    my $fichier = 'test.txt';
    open( FILE, '<', $fichier ) or die("open $fichier : $!");
    while ( my $ligne = <FILE> ) {
      chomp $ligne;
     
      my @mots_lignes = split( /\s+/, $ligne );
      foreach my $mot (@mots_lignes) {
        if ( exists $mot_a_trouver{$mot} ) {
          print "$mot trouve en ligne $.\n";
          $mot_a_trouver{$mot}++;
        }
      }
    }
    close(FILE);
     
    # Resumé
    print "\n======================\n";
    foreach my $mot ( sort { $mot_a_trouver{$a} <=> $mot_a_trouver{$b} || $a cmp $b } keys %mot_a_trouver ) {
      print "$mot a ete trouve $mot_a_trouver{$mot} fois\n";
    }
    __END__
    fichier résultat :
    ftp trouve en ligne 1
    http trouve en ligne 1
    gre trouve en ligne 1
    icmp trouve en ligne 1
    eigrp trouve en ligne 1
    ipinip trouve en ligne 1
    ipsec trouve en ligne 1
    ospf trouve en ligne 1
    bgp trouve en ligne 1
    cuseeme trouve en ligne 1
    dhcp trouve en ligne 1
    dns trouve en ligne 2
    finger trouve en ligne 2
    gopher trouve en ligne 2
    secure-http trouve en ligne 2
    imap trouve en ligne 2
    secure-imap trouve en ligne 2
    irc trouve en ligne 2
    secure-irc trouve en ligne 2
    kerberos trouve en ligne 2
    l2tp trouve en ligne 3
    ldap trouve en ligne 3
    netbios trouve en ligne 3
    nfs trouve en ligne 3
    nntp trouve en ligne 3
    secure-nntp trouve en ligne 3
    notes trouve en ligne 3
    ntp trouve en ligne 3
    pop3 trouve en ligne 3
    secure-pop3 trouve en ligne 4
    pptp trouve en ligne 4
    rip trouve en ligne 4
    rsvp trouve en ligne 4
    smtp trouve en ligne 4

    ======================
    KK a ete trouve 0 fois
    citrix a ete trouve 0 fois
    custom01 a ete trouve 0 fois
    custom02 a ete trouve 0 fois
    custom03 a ete trouve 0 fois
    custom04 a ete trouve 0 fois
    custom05 a ete trouve 0 fois
    custom06 a ete trouve 0 fois
    custom07 a ete trouve 0 fois
    custom08 a ete trouve 0 fois
    custom09 a ete trouve 0 fois
    custom10 a ete trouve 0 fois
    edonkey a ete trouve 0 fois
    exchange a ete trouve 0 fois
    fasttrack a ete trouve 0 fois
    gnutella a ete trouve 0 fois
    h323 a ete trouve 0 fois
    kazaa2 a ete trouve 0 fois
    mgcp a ete trouve 0 fois
    netshow a ete trouve 0 fois
    novadigm a ete trouve 0 fois
    printer a ete trouve 0 fois
    rcmd a ete trouve 0 fois
    rtcp a ete trouve 0 fois
    rtp a ete trouve 0 fois
    rtsp a ete trouve 0 fois
    secure-ftp a ete trouve 0 fois
    secure-ldap a ete trouve 0 fois
    secure-telnet a ete trouve 0 fois
    sip a ete trouve 0 fois
    skinny a ete trouve 0 fois
    snmp a ete trouve 0 fois
    socks a ete trouve 0 fois
    sqlnet a ete trouve 0 fois
    sqlserver a ete trouve 0 fois
    ssh a ete trouve 0 fois
    streamwork a ete trouve 0 fois
    sunrpc a ete trouve 0 fois
    syslog a ete trouve 0 fois
    telnet a ete trouve 0 fois
    tftp a ete trouve 0 fois
    unknown a ete trouve 0 fois
    vdoliv a ete trouve 0 fois
    winmx a ete trouve 0 fois
    xwindows a ete trouve 0 fois
    bgp a ete trouve 1 fois
    cuseeme a ete trouve 1 fois
    dhcp a ete trouve 1 fois
    dns a ete trouve 1 fois
    eigrp a ete trouve 1 fois
    finger a ete trouve 1 fois
    ftp a ete trouve 1 fois
    gopher a ete trouve 1 fois
    gre a ete trouve 1 fois
    http a ete trouve 1 fois
    icmp a ete trouve 1 fois
    imap a ete trouve 1 fois
    ipinip a ete trouve 1 fois
    ipsec a ete trouve 1 fois
    irc a ete trouve 1 fois
    kerberos a ete trouve 1 fois
    l2tp a ete trouve 1 fois
    ldap a ete trouve 1 fois
    netbios a ete trouve 1 fois
    nfs a ete trouve 1 fois
    nntp a ete trouve 1 fois
    notes a ete trouve 1 fois
    ntp a ete trouve 1 fois
    ospf a ete trouve 1 fois
    pop3 a ete trouve 1 fois
    pptp a ete trouve 1 fois
    rip a ete trouve 1 fois
    rsvp a ete trouve 1 fois
    secure-http a ete trouve 1 fois
    secure-imap a ete trouve 1 fois
    secure-irc a ete trouve 1 fois
    secure-nntp a ete trouve 1 fois
    secure-pop3 a ete trouve 1 fois
    smtp a ete trouve 1 fois

  6. #6
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Par défaut Merciiiiiiiiiii
    it works!!
    trop bien )

    je ne connaissais pas la fonction "map"

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

Discussions similaires

  1. Communication entre deux fichiers excel dont l'un reste ferme
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 21/03/2008, 12h19
  2. Communication entre deux fichiers Excel
    Par typiquement dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/03/2008, 14h38
  3. Communication entre deux fichiers excel
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/10/2007, 14h18
  4. [STL] Extraire les éléments communs entre 2 Listes
    Par mambo dans le forum SL & STL
    Réponses: 15
    Dernier message: 26/04/2007, 11h12
  5. Réponses: 15
    Dernier message: 17/06/2006, 11h49

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