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 :

Fichier: Suppression de doublons d'une ligne


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de système d'information
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Administrateur de système d'information

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Fichier: Suppression de doublons d'une ligne
    Bonjour à tous,

    Débutant en perl, je n'arrive pas à trouver la solution à mon problème.

    - J'ai un fichier source constitué ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ANGLAIS|BOBIN|BOBINO|JEAN|18/05/1952|CERT. CL N|29EME REC.|Ancienneté de service (ECHELON)|9|1|MONTPEL.|278.0|Ancienneté dans le poste|14|1|MONTPEL.|278.0|Enfants à charge|3|2|LYON|278.0|Enfants à charge|3|1|MONTPEL.|278.0|Ancienneté dans le poste|14|2|LYON|278.0|Mention Complementaire|Non|1|MONTPEL.|278.0|Ancienneté de service (ECHELON)|9|2|LYON|278.0|Ancienneté de service (ECHELON)|9|3|AIX_MARS.|278.0|Ancienneté dans le poste|14|3|AIX_MARS.|278.0|Enfants à charge|3|3|AIX_MARS.|278.0|Mention Complementaire|Non|3|AIX_MARS.|278.0|Ancienneté de service (ECHELON)|9|4|NICE|278.0|Ancienneté dans le poste|14|4|NICE|278.0|Mention Complementaire|Non|2|LYON|278.0|Enfants à charge|3|4|NICE|278.0|Mention Complementaire|Non|5|GRENOBLE|278.0|Mention Complementaire|Non|4|NICE|278.0|Ancienneté de service (ECHELON)|9|5|GRENOBLE|278.0|Ancienneté dans le poste|14|5|GRENOBLE|278.0|Enfants à charge|3|5|GRENOBLE|278.0|AGENCE ENS.FRANCAIS A ETRANGER|LA BOURDONNAIS (M,E,C,L)||CUREPIPE|N|
    MATHS|DEUF|BLANC|JOHN|22/08/1971|CERT. CL N|VERSAILLES|Rapprochement Résidence Enfant|077|3|VERSAILLES|357.0|Enfants à charge|1|2|PARIS|357.0|Mention Complementaire|Non|3|VERSAILLES|357.0|Rapprochement Résidence Enfant|077|2|PARIS|357.0|Mention Complementaire|Non|2|PARIS|357.0|Ancienneté de service (ECHELON)|11|3|VERSAILLES|357.0|Ancienneté dans le poste|8|3|VERSAILLES|357.0|Enfants à charge|1|3|VERSAILLES|357.0|Ancienneté dans le poste|8|2|PARIS|357.0|Ancienneté de service (ECHELON)|11|2|PARIS|357.0|Ancienneté dans le poste|8|1|CRETEIL|357.0|Enfants à charge|1|1|CRETEIL|357.0|Rapprochement Résidence Enfant|077|1|CRETEIL|357.0|Mention Complementaire|Non|1|CRETEIL|357.0|Ancienneté de service (ECHELON)|11|1|CRETEIL|357.0|MINISTERE AFFAIRES ETRANGERES||||N|
    Comme vous pouvez le voir, les champs sont séparés par des pipes.
    Chaque ligne représente une personne.
    Pour chaque ligne, on a des doublons...

    Exemple (j'ai mis des retours charriot pour que vous puissiez y voir plus clair):

    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
    ANGLAIS|BOBIN|BOBINO|JEAN|18/05/1952|CERT. CL N|29EME REC.|
     
    Ancienneté de service (ECHELON)|9|
    1|MONTPEL.|278.0|
    Ancienneté dans le poste|14|
    1|MONTPEL.|278.0|
    Enfants à charge|3|
    2|LYON|278.0|
    Enfants à charge|3|
    1|MONTPEL.|278.0|
    Ancienneté dans le poste|14|
    2|LYON|278.0|
    Mention Complementaire|Non|
    1|MONTPEL.|278.0|
    Ancienneté de service (ECHELON)|9|
    2|LYON|278.0|
    Ancienneté de service (ECHELON)|9|
    3|AIX_MARS.|278.0|
    Ancienneté dans le poste|14|
    3|AIX_MARS.|278.0|
    Enfants à charge|3|
    3|AIX_MARS.|278.0|
    Mention Complementaire|Non|
    3|AIX_MARS.|278.0|
    Ancienneté de service (ECHELON)|9|
    4|NICE|278.0|
    Ancienneté dans le poste|14|
    4|NICE|278.0|
    Mention Complementaire|Non|
    2|LYON|278.0|
    Enfants à charge|3|
    4|NICE|278.0|
    Mention Complementaire|Non|
    5|GRENOBLE|278.0|
    Mention Complementaire|Non|
    4|NICE|278.0|
    Ancienneté de service (ECHELON)|9|
    5|GRENOBLE|278.0|
    Ancienneté dans le poste|14|
    5|GRENOBLE|278.0|
    Enfants à charge|3|
    5|GRENOBLE|278.0|
     
    AGENCE ENS.FRANCAIS A ETRANGER|LA BOURDONNAIS (M,E,C,L)||CUREPIPE|N|
    Evidemment, les lignes entre la première et la dernière sont aléatoires...

    Je souhaiterais obtenir en sortie, le résultat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ANGAIS|BOBIN|BOBINO|JEAN|18/05/1952|CERT. CL N|29EME REC.|
     
    Ancienneté de service (ECHELON)|9|
    Ancienneté dans le poste|14|
    Enfants à charge|3|
    Mention Complementaire|Non|
    1|MONTPEL.|278.0|
    2|LYON|278.0|
    3|AIX_MARS.|278.0|
    4|NICE|278.0|
    5|GRENOBLE|278.0|
     
    AGENCE ENS.FRANCAIS A ETRANGER|LA BOURDONNAIS (M,E,C,L)||CUREPIPE|N|
    Ce qui donnerait au final a ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ANGLAIS|BOBIN|BOBINO|JEAN|18/05/1952|CERT. CL N|29EME REC.|Ancienneté de service (ECHELON)|9|Ancienneté dans le poste|14|Enfants à charge|3|Mention Complementaire|Non|1|MONTPEL.|278.0|2|LYON|278.0|3|AIX_MARS.|278.0|4|NICE|278.0|5|GRENOBLE|278.0|AGENCE ENS.FRANCAIS A ETRANGER|LA BOURDONNAIS (M,E,C,L)||CUREPIPE|N|

    J'ai testé plusieurs choses sans succès.
    Voici la derniere version de mon script qui ne fonctionne pas car je perds des valeurs...

    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    open(DESTINATION, '< C:...monfichier.txt') || die;
     
     
    while (my $ligne = <DESTINATION>){
     
    	my @tableau= split(/\|/, $ligne);
            my @filtered = uniq(@tableau);
     
     	sub uniq {
                   my %seen;
                   grep !$seen{$_}++, @_;
    	}
     
    print "@filtered\n";
     
    }  
     
    close DESTINATION;
    Et voici ce que ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ANGLAIS BOBIN BOBINO JEAN 18/05/1952 CERT. CL N 29EME REC. Ancienneté de service (ECHELON) 9 1 MONTPEL. 278.0 Ancienneté dans le poste 14 Enfants à charge 3 2 LYON Mention Complementaire Non AIX_MARS. 4 NICE 5 GRENOBLE AGENCE ENS.FRANCAIS A ETRANGER LA BOURDONNAIS (M,E,C,L)  CUREPIPE N
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ANGLAIS BOBIN BOBINO JEAN 18/05/1952 CERT. CL N 29EME REC.
     Ancienneté de service (ECHELON) 9 
    1 MONTPEL. 278.0 
    Ancienneté dans le poste 14 
    Enfants à charge 3 
    2 LYON 
    Mention Complementaire Non 
    AIX_MARS. 
    4 NICE 
    5 GRENOBLE 
    AGENCE ENS.FRANCAIS A ETRANGER LA BOURDONNAIS (M,E,C,L)  CUREPIPE N
    Merci d'avance de me donner un coup de main.

  2. #2
    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
    Hum, pas très facile parce que certains de tes enregistrements (dans la version reformattée) ont 2 champs et d'autres 3. Du coup, on ne sait pas très bien comment faire pour effectuer le même tronçonnement de tes lignes en entrée. Y a-t-il des règles permettant de reconnaître les "sous-lignes" à 2 de celles à 3 champs?

Discussions similaires

  1. AWK suppression d'espace dans une ligne
    Par falcon dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 16/07/2008, 09h52
  2. Suppression de doublons sur une grosse table
    Par CaptainT dans le forum SQL
    Réponses: 20
    Dernier message: 24/05/2008, 09h25
  3. Supprimer plusieurs fichiers du même nom en une ligne de commande
    Par Orbiplanax dans le forum Administration système
    Réponses: 4
    Dernier message: 12/09/2007, 18h25
  4. [VBA-E]trie(suppression de doublons) dans une feuille excel
    Par TANIE dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/08/2006, 13h25
  5. Suppression de doublons dans une table partionnée
    Par ludmillaj dans le forum Oracle
    Réponses: 10
    Dernier message: 27/12/2005, 14h34

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