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

Programmation et administration système Perl Discussion :

Filtre sur noms machines


Sujet :

Programmation et administration système Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Filtre sur noms machines
    Coucou all,

    Je suis actuellement stagiaire dans une grande entreprise et j'ai pour mission de créer un petit script en perl qui a pour but de trouver les numéros serials de certains équipements, ces équipements sont placés par leurs noms dans un fichier texte et c'est ce fichier que le script va avoir en input ;

    Mais je dois faire un filtre sur des noms machines, je ne dois faire ces requètes que sur les fichiers commencant par : (SD|SW|SR|RT|RS) alors que dans le fichier texte il y a d'autres noms,

    Je débute un peu donc merci de ne pas rigoler du code suivant ^^

    J'ai pensé à faire :

    foreach $ARGV !~ m/^(SD|SW|SR|RT|RS);
    Mais je suis vraiment pas convaincu...

    Si quelqu'un pouvait m'aider à faire ce filtrage de noms machines ce serait super !

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    open(my $fichier, "<", $ARGV[0]) or die("Impossible d'ouvrir le fichier: $!");
    while (my $ligne = <$fichier>) {
      if ($ligne =~ /^(SD|SW|SR|RT|RS)/) {
        # Ton traitement
      }
    }
    La première ligne ouvre le fichier fourni en argument au programme en utilisant le file handle $fichier. On lit ensuite le fichier ligne par ligne, et pour chaque ligne qui commence par SD, SW, SR, RT ou RS, on fait un traitement.

    Bonne chance et bon stage!

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    J'esperait pas une réponse aussi rapide et précise merci beaucoup pour ton aide !! Si j'ai un autre souci je reviendrais surement, apparament le niveau du forum est plutôt bon ! (meilleur que moi en tout cas lol)

    Merciiii

  4. #4
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    N'oublie pas de cliquer sur le lien 'Résolu' au bas de la page

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    C'est fait merci encore

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    J'en demande surement trop ^^

    Voici mon code, j'ai fait ce que j'ai put, il a surement quelques erreurs et je ne vois pas comment compléter la partie que j'ai intitulé "Filtrage sur les noms machines qui nous intéressent"

    Une idée ?

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #!/opt/perl5/bin/perl -w
     
    use strict;
     
     
    #------------  Vérification de l'existence et du type du paramètre passé au script  ------------#
     
    $ARGV=@ARGV;
     
    if ($ARGV == 0) {print("\n\nPas de parametre en entree du script.\n\n",
                           "  Veuillez lancer le script de cette facon:\n",
                           "  sous windows: perl -w script fichier_input\n",
                           "  sous unix:    ./script fichier_input\n\n");
                     exit;}
    if (not -f $ARGV[0]) {print("\n\nLe fichier passe en parametre n'existe pas.\n\n",
                                "Veuillez verifier que le nom du fichier est exact et ",
                                "qu'il se trouve dans le meme repertoire que le script\n\n");
                          exit;}
     
     
    #-----------------------------------  Fin de la Vérification  ----------------------------------#                   
    #                    										#
    #--------------------  Filtrage sur les noms machines qui nous intéressent  --------------------#                      
     
    my @tri;
    open (ARGV,"<",$ARGV[0]) or die("Impossible d'ouvrir le fichier !");
     
    while () {
    	if ($_ =~ m/^(SD|SW|SR|RT|RS|FW) ) {
    	my noms;
    	my series;
    	my $requete=`à faire`;
    		if ( $requete eq "" ) {
    		print "L'equipement est inconnu.\n";
    	...
     
     
     
     
     
    	}
    	else {print("Equipement ne commencant pas par la liste définit dans le script")}
    }
     
     
    #---------------------------------------  Fin du filtrage  -------------------------------------#                   
    #                    										#
    #----------------------------  Définitions des variables utilisées  ----------------------------#
     
     
    my $output_file = "resultat.txt";
    my $res;
     
     
    #------------------------  Fin des Définitions des variables utilisées  ------------------------#
    #												#
    #------------------------  Création du fichier de résultat et affichage  -----------------------#
     
    my @res_tri = sort (@tri);
    open(SERIES,">$output_file") or die "Création du fichier de résultat impossible $!\n";
    print SERIES "-- Voici la liste des équipements classés par noms et leurs numéros de series --";
    foreach (@res_tri) { print SERIES "$_\n"; }
    close(SERIES);
     
     
    #-------------------------  Fin de la création du fichier de résultat  -------------------------#
     
     
     
     
     
     
     
     
     
     
     
     
    #---------------------------------------  Fin du script  ---------------------------------------#

    J'espere que comme hier quelqu'un pourra m'aider, je fais du PERL depuis hier donc j'avance pas très vite pour faire ce script (mais je cherche)

  7. #7
    Membre du Club Avatar de bluecurve
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 68
    Points : 43
    Points
    43
    Par défaut
    Voila une ébauche tiré de ton code et arrangé comme il 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    #!/opt/perl5/bin/perl -w	     
    use strict;
    use diagnostics;
     
     
    #  -------------------------------------
    #  Vérification des paramètres du script
     
    # en mettant  !$ARGV[0] j'inverse la confidition if sur la variable
    if (!$ARGV[0])
    {
      print(
             "\n\nPas de parametre en entree du script.\n\n",
             "  Veuillez lancer le script de cette facon:\n",
             "  sous windows: perl -w script fichier_input\n",
             "  sous unix:    ./script fichier_input\n\n"            
           );
     exit(0);
    } 
     
     
    # unless est l'inverse de if
    unless ( -e $ARGV[0] )
    {
      print(
            "\n\nLe fichier passe en parametre n'existe pas.\n\n",
            "Veuillez verifier que le nom du fichier est exact et ",
            "qu'il se trouve dans le meme repertoire que le script\n\n"
           );
      exit(0);
    }               
      else
    {
      print ("\n\nDebut du traitement...\n");
      _check_machin($ARGV[0]);
      print ("\n\nFin du traitement...\n");
    }  
     
     
     
     
     
     
    #  -------------------------------------
    #  Fltrage des noms machine
     
    sub _check_machin
    {
      # shift permet de récupérer $_[0] mais supprime celui-ci
      my $file = shift;
     
      open(FILE, "<", $file) or die ('Impossible d\'ouvrir le fichier !!!');
      # On pose un vérrou sur le fichier
      flock(FILE, 2);
     
      # Parcour du fichier avec un while
      # ne jamais utilier $_ a outrance a cause d'effets de bord pour les fichiers ayant bcp de lignes
     
      while (my $data = <FILE> )
      {
          # l'attibut i du regxps signifie que tu ignore la casse
          if ( $data =~ m/^(SD|SW|SR|RT|RS|FW)/i )
          {
             my ($nom, $serie);
             # Ton traitement
     
             # ....
     
             # Etape finale
             _make_output($nom,$serie);
          }
      }
     
      # On supprime le vérrou
      flock(FILE,8);
      close(FILE);
    }
     
     
     
     
     
    #  -------------------------------------
    #  Ajout de données au fichier de sortie  
    #  Affichage des résultats
     
    sub _make_output
    {
       my $nom   = shift;
       my $serie = shift;
     
       print "-----Ajout de donnees-----------------------------------\n";
       print "Nom : $nom\n";
       print "Serie : $serie\n";
       print "--------------------------------------------------------\n";
     
       # >> indique a perl d'écrire de façon incrémentale
       open(FILE, ">> outpout.txt") or die ('Unable to open output file $!');
       flock(FILE, 2);
       print FILE $nom ." ::: ". $serie;   
       flock(FILE, 8);
       close(FILE);
    }
    En espérant que sa t'aide,

    PS: Peut on avoir un extrait de ton fichier d'entré ?

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

Discussions similaires

  1. [DATA] Filtre sur nom des colonnes
    Par thtghgh dans le forum SAS Base
    Réponses: 1
    Dernier message: 03/02/2014, 10h24
  2. Filtre sur nom de fichier
    Par Pgs dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 12/09/2010, 12h27
  3. Réponses: 4
    Dernier message: 22/03/2008, 06h26
  4. Ping sur noms machines dans fichiers txt
    Par elbossoso dans le forum Programmation et administration système
    Réponses: 5
    Dernier message: 02/12/2006, 16h42
  5. Réponses: 8
    Dernier message: 13/07/2004, 10h00

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