Bonjour,
J'ai un fichier en csv que je souhaiterais reformater via un script perl.
Le fichier en entrée contient des lignes sous cette forme :
Le but est d'obtenir en sortie, pour chaque ligne un ligne de donnée brut formatés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 670013325;C05;A000000186;A05;P56;62483000;6;24;830;0;1;55;;1;8;;2;2001;8;;;0;0;0;;59420;0;0;0;1;0;;Z800;;0;4; 670780162;C05;A000003374;A05;P56;62470900;6;24;709;0;1;22;;2;8;;2;2001;8;;;0;0;0;;59100;;0;0;1;0;;L024;;0;2; 670780170;C05;A000009579;A05;P56;60518200;6;5;182;80;1;58;;1;7;1;5;2001;8;;;0;0;3;;62231;0;0;15;1;0;;I251;;7;9;
Le script perl suivant devrait permettre ca :
Seulement, dans mon fichier de sortie, j'ai de belles lignes de caractères vides mais plus mes données...
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 #!/usr/bin/perl if(scalar(@ARGV)==2){ $fic_entree = $ARGV[0]; $fic_sortie = $ARGV[1]; open(SOURCE, "< $fic_entree") or die "Impossible d'ouvrir le fichier d'entrée : $!\n"; open(DEST, "> $fic_sortie") or die "Impossible d'ouvrir le fichier de sortie : $!\n"; $ind=0; my $format="A9 A3 A10 A3 A3 A9 A2 A2 A3 A2 A2 A3 A3 A1 A1 A1 A2 A4 A1 A1 A1 A2 A2 A3 A3 A5 A4 A2 A3 A1 A1 A6 A6 A6 A2 A2"; while(<SOURCE>){ chomp; $new_line=""; $ligne_courante = $_; @champs = split(/;/,$ligne_courante,-1); $new_ligne=pack($format,@champs); $ind++; print DEST $new_line."\n"; } print "Index max : ".$ind."\n"; close(SOURCE); close(DEST); } else{ print("Syntaxe : perl nettoyeur_bis.pl fichier_entree fichier_sortie\n"); }
Si quelqu'un a une idée...
Je vous remercie d'avance.
Partager