Bonjour à tous,
Débutant en perl, je n'arrive pas à trouver la solution à mon problème.
- J'ai un fichier source constitué ainsi:
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):
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:
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:
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...
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:
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
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.
Partager