Bonjour à tous,
je vais essayé de vous exposer mon problème :
j'ai un fichier1 (fichier clients) qui contient 5 champs (fichier csv) :
- champ1 est le numéro de client
- champ2 est le nom du client
- champ3 est l'adresse du client
- champ4 est la ville du client
- champ5 est le département du client
soit par exemple :
1 ;dupont ;11 rue des jasmins ;oiseville ;60
2 ;dubois ;12 rue des oeillets ;laville s mer ;76
3 ;durand ;13 rue des roses ;nordville ;59
4 ;dugnou ;14 rue des lilas ;sudville ;34
ce fichier est trié par numéro de client (champ1)
j'ai un fichier2 (fichiers des liens clients/contrats) qui contient 5 champs (fichier csv) :
- champ1 est le numéro de client
- champ2 est le numéro de contrat
- champ3 est le type de contrat
- champ4 est le role du client dans le contrat
- champ5 est le département du client
soit par exemple :
1 ;1 ;0 ;titulaire ;?
1 ;2 ;1 ;bénéficiaire ;?
2 ;2 ;0 ;bénéficiaire ;?
3 ;3 ;0 ;titulaire ;?
3 ;4 ;1 ;titulaire ;?
3 ;5 ;2 ;titulaire ;?
ce fichier est trié par numéro de client
on voit que le champ5 est mal alimenté (?) ; il y a n'importe quoi dedans.
L'objet de ce que je voudrais faire est de l'alimenter correctement. Et donc, à partir des fichier1 et fichier2 construire un fichier3 qui serait le fichier2 corrigé :
dans l'exemple, cela donnerait :
1 ;1 ;0 ;titulaire ;60
1 ;2 ;1 ;bénéficiaire ;60
2 ;2 ;0 ;bénéficiaire ;76
3 ;3 ;0 ;titulaire ;59
3 ;4 ;1 ;titulaire ;59
3 ;5 ;2 ;titulaire ;59
La logique du traitement serait celle-ci :
FF1:=0 init flag fin fichier1
FF2:=0 init flag fin fichier2
FL1:=1 init flag lecture fichier 1
FL2:=1 init flag lecture fichier 2
Tant que FF2 <> 0 alors
...Si FL2=1 et FF2=0 alors
......lire_ligne fichier2
......Si Fin de fichier2 alors
.........FF2:=1
......Sinon
.........Var2:=fichier2.champ1
......Fsi
...Fsi
...Si FL1=1 et FF1=0 alors
......lire_ligne fichier1
......Si Fin de fichier1 alors
.........FF1:=1
......Sinon
.........Var1:=fichier1.champ1
......Fsi
...Fsi
...Si Var1=Var2 alors
......Fichier2.champ5:=Var1
......ligne_Fichier3:=ligne_Fichier2
......Ecrire_ligne Fichier3
......FL1:=0
......FL2:=1
...Sinon
......FL1:=1
......FL2:=0
...Fsi
FinTantque
Ca n'est pas bien compliqué, je pense. Et il me semble que AWK saurait faire ça efficacement. Je connais un peu mais pas suffisamment.
Quelqu'un peut-il m'aider, car pour un AWKman confirmé, ça doit être de la rigolade.
quelques compléments :
======================
les fichiers en question dans la réalité ont quelques dizaines de colonnes (moins de 50) mais aussi quelques millions de lignes.
Avis aux amateurs et merci d'avance.
javascript:editor_tools_handle_smiley()
A votre disposition si besoin d'explications.
Super_Didji
Poste le Friday 12 February 2010 17:12:19