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 :

Gestion de fichiers


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut Gestion de fichiers
    Bonjour tout le monde,

    Je suis en train de me faire un petit script pour retirer les adresse IP des log de mon routeur. Mon script fonctionne a 99% mais je n'arrive pas a trouver le petit 1 % pour le faire fonctionner comme il faut, je vous montre mon code et vous explique ensuite le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    use warnings;
    use strict;
    my$fichier1= $ARGV[0];
    my$fichier2= $ARGV[1];
    open(SOURCE,"<$fichier1");
    open (DESTINATION, ">$fichier2");
    while (<SOURCE>) {
        if ($_ =~m/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){
            print DESTINATION $&  ;
            }
        }
    close SOURCE;
    close DESTINATION;
    Lorsque je regarde le fichier de résultat, j'ai toutes mes adresse IP mais le hic c'est qu'elle sont une à la suite de l'autre. Je n'arrive pas à faire un saut de ligne entre chaque adresse et ça fait 1 semaine que je suis sur ce trouble. La réponse est probablement très évidente mais n'étant pas doué en perl, elle ne me viens pas. Quelqu'un à une suggestion pour moi???

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    A l'avenir, pense à mettre ton code entre balises CODE (bouton # de l'interface d'édition du forum), c'est beaucoup plus agréable et tu augmentes ainsi tes chances d'obtenir une réponse rapide.

    Pour répondre à ta question, je commencerais par te faire remarquer que l'emploi de $& est déconseillé en Perl, il ralentit globalement le moteur de regexp dans l'ensemble de l'application, alors qu'il est simple de faire sans. Sinon, c'est une simple affaire de rajouter un saut de ligne dans ta sortie :
    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
    #!/usr/bin/perl
    use strict; use warnings;
     
    my ($in_file_path, $out_file_path) = @ARGV;
    open my($in_file), '<', $in_file_path
      or die "Couldn't open $in_file_path : $!\n";
    open my($out_file), '>', $out_file_path
      or die "Couldn't open $out_file_path : $!\n";
     
    while (<$in_file>) {
       if ( m/ ( \d{1,3} (\.\d{1,3}){3} ) /x ) {
          print {$out_file} "$1\n";
       }
    }
     
    close $in_file;
    close $out_file;
     
    __END__
    --
    Jedaï

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut Clarification
    Jedai

    Donc si je comprends bien, le $1 est le "résultat" de l'expression régulière, c'est ca?

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par dx700t Voir le message
    Donc si je comprends bien, le $1 est le "résultat" de l'expression régulière, c'est ca?
    Pas exactement, $1 est le bout de chaîne de caractère reconnu par la portion de la regexp dans la première paire de parenthèses, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    "hello world" =~ m/(\w+) \w+/;
    print "$1\n"; # affiche "hello"
     
     
    "567234" =~ m/(\d(\d\d))(\d{3})/;
    print "$1\n"; # affiche "567" : la première paire de parenthèses commence à la première parenthèse de la regexp
    print "$2\n"; # "67"
    print "$3\n"; # "234"
    --
    Jedaï

Discussions similaires

  1. Gestion de fichier
    Par Zenol dans le forum C++
    Réponses: 6
    Dernier message: 22/09/2005, 16h44
  2. gestion de fichier à partir d'un formulaire
    Par seb59dk dans le forum Access
    Réponses: 3
    Dernier message: 06/09/2005, 17h52
  3. Fonctions de gestion de fichiers
    Par sebduth dans le forum Fortran
    Réponses: 4
    Dernier message: 22/08/2005, 11h38
  4. [JDOM] Gestion "gros fichiers"
    Par Haazheel dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 17/10/2003, 14h42
  5. [Concept] BD ou Gestion par fichier. Intérêt de la BD ?
    Par Cian dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/11/2002, 13h16

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