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 :

Comparer deux valeurs et afficher une 3eme si match


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut Comparer deux valeurs et afficher une 3eme si match
    Bonjour,

    j'ai un problème de méthodologie sur un problème.

    J'ai un fichier excel avec copie écran en pièce jointe.

    Le besoin est que la colonne IP contient des adressses qui peuvent être en doubles. Si cette adresse match une dans la colonne "IP admin" qui sont uniques associé au nom "feuillet equipement".
    Lorsque ca correspondant, afficher "lIP" et le "feuilllet equipement"

    j'ai fait un bout de script mais ca boule à l'infinie.

    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
    use strict;
    use warnings;
    use Data::Dumper;
    use feature 'say';
    use Data::Dumper;
    use Spreadsheet::Read;
    no warnings 'uninitialized';
     
    my $book  = ReadData ("aleandre.xls");
    my @nico1 = Spreadsheet::Read::rows($book->[1]);
     
     
    shift @nico1;
     
    my @third;
     
    my %hash;
     
    foreach my $ligne (@nico1) {
    	#say "${$ligne}[0]";
    	$hash{${$ligne}[0]} = ${$ligne}[1];
    	push @third, ${$ligne}[2];
    	}
     
    foreach my $trois (@third) {
    	 while (my ($key, $value) = each %hash) {
    		say "$key $trois" if $trois = $value;
    		}
    	}
    Par exemple pour :
    KFR_SW_1036 172.27.243.239 172.27.243.239
    KFR_SW_1037 172.27.243.244 172.27.243.239
    KFR_SW_1038 172.27.243.243 172.27.243.244

    Ca donnerait:
    KFR_SW_1036 172.27.243.239
    KFR_SW_1036 172.27.243.239


    Sinon une question, les commandes pop, shift ne fonctionnent pas avec les références? J'ai eu des messages d'erreur que c'était en mode expérimentale.

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Bon autant pour moi, cétai juste remplacer le "=" par "eq" dans le if

    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
    use warnings;
    use Data::Dumper;
    use feature 'say';
    use Data::Dumper;
    use Spreadsheet::Read;
    no warnings 'uninitialized';
     
    my $book  = ReadData ("aleandre.xls");
    my @nico1 = Spreadsheet::Read::rows($book->[1]);
     
     
    shift @nico1;
     
    my @third;
     
    my %hash;
     
    foreach my $ligne (@nico1) {
    	$hash{${$ligne}[0]} = ${$ligne}[1];
    	push @third, ${$ligne}[2];
             }
     
    foreach my $trois (@third) {
    	 while (my ($key, $value) = each %hash) {
    		say "$key $trois" if $trois eq $value;
    		}
    	}

    Résulat :

    KFR_SW_1036 172.27.243.239
    KFR_SW_1036 172.27.243.239
    KFR_SW_1037 172.27.243.244
    KFR_SW_1037 172.27.243.244
    KFR_SW_1038 172.27.243.243
    KFR_SW_1038 172.27.243.243
    KFR_SW_1039 172.27.243.242
    KFR_SW_1039 172.27.243.242

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par caramon _majere Voir le message
    Sinon une question, les commandes pop, shift ne fonctionnent pas avec les références? J'ai eu des messages d'erreur que c'était en mode expérimentale.
    Si, ça marche, mais c'est expérimental, il faut donc utiliser le pragma voulu pour ne pas avoir de problème.

    Sinon, c'est très facile de déréférencer des ref. Exemple sous le débugger:
    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
     
      DB<2> $a_ref = [2, 3, 4];
     
      DB<3> x $a_ref
    0  ARRAY(0x3002a088)
       0  2
       1  3
       2  4
     
      DB<4> $first = shift @$a_ref;
     
      DB<5> p $first
    2
      DB<6> x $a_ref
    0  ARRAY(0x3002a088)
       0  3
       1  4

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Merci Lolo

    Comment je trouve le bon pragma? J'ai l'impression qu'il y en a plusieurs pour l'expérimentale.

    En fait j'ai crié victoire trop vite, il y a une coquille dans le script.

    A la ligne 1333 du fichier en pièce jointe à la colonne C 172.29.23.245 apparaît mais il ne fait pas il ne trouve pas la valeur identique à la colonne B à la ligne 2428 et ca provoque un décalage.

    Je ne vois pas trop ou ca coince car ca donne.

    Je devrais avoir comme résultat qui apparaît mais pour ce cas la, ca bloque.
    KFR_SW_3462 172.29.23.245
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par caramon _majere Voir le message

    Comment je trouve le bon pragma? J'ai l'impression qu'il y en a plusieurs pour l'expérimentale.
    Je pense que c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    use experimental 'autoderef';
    Mais c'est dans la doc (j'ai dû regarder, je ne connais pas par coeur tous les pragmas).

    Personnellement, j'évite plutôt d'utiliser les "experimental features", surtout quand c'est facile à faire "à l'ancienne".

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Je te rassure je ne voulais pas faire compliqué, au contraire, je suis débutant

    J'avais jeté un coup d'oeil sur la page "http://perldoc.perl.org/perlexperiment.html" pour la recherche du pragma ...mais c'est aussi clair qu'un man linux

    Allez je te sollicite une dernière fois, j'abuse.

    Dans la copie d'écran du fichier excel "merdier.xls" à la ligne 1333, 3è cellule j'ai 172.29.23.245, que je devrais retrouver dans la seconde cellule à la ligne 2428 (seconde capture d'écran) pour m'afficher
    KFR_SW_3462 172.29.23.245


    Nom : excel.png
Affichages : 81
Taille : 5,7 Ko

    Nom : excel1.png
Affichages : 62
Taille : 3,0 Ko

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Désolé, mais je ne comprends vraiment pas ce que tu cherches à faire avec tes adresses IP, et donc, je ne comprends pas non plus ton anomamlie.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Ne te casse plus la tête, en fait dans le fichier source que l'on m'avait fournis, deux trois cellules avaient un espace à la fin ...et ca n'est pas visible :

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/09/2011, 12h58
  2. comparer deux valeurs d'une variable
    Par nostress dans le forum SAS Base
    Réponses: 2
    Dernier message: 29/01/2010, 16h34
  3. sortir deux valeurs numériques d'une chaine de caractères
    Par Ness2000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2008, 08h52
  4. [MySQL] Comparer deux valeurs depuis deux tables
    Par jbidou88 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/03/2008, 14h20
  5. Comparer deux valeurs d'un champ
    Par goulhasch dans le forum Macro
    Réponses: 7
    Dernier message: 13/09/2007, 09h44

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