Commande printf retour à la ligne non voulu
Bonjour,
Je souhaite lire des données dans un fichier et les imprimer sur une ligne.
Avec le code suivant, je lis bien les données mais des retours chariot non voulus apparaîssent :
Code:
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 45 46 47 48 49 50 51 52
| #!/usr/bin/perl
system $^O eq 'MSWin32' ? 'cls' : 'clear';
# Declare the subroutines
sub trim($);
# Perl trim function to remove whitespace from the start and end of the string
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
open(FILE,$ARGV[0]) || die ("Impossible d'ouvrir le fichier $ARGV[0]");
open(TAR,">res_pl.txt");
while(<FILE>)
{
if ( $_ =~ /^00.*/ )
{
(my $distributeur = $_) =~ s/^00(\d{7})(.*)/$1/;
printf "Distributeur : $distributeur";
}
elsif ( $_ =~ /^99.*/ )
{
($distributeur = $_) =~ s/^00(\d{7})(.*)/$1/;
}
else
{
(my $natcompt = $_) =~ s/^(.{18})(.{10})(.*)$/$2/;
(my $centcout = $_) =~ s/^(.{28})(.{10})(.*)$/$2/;
(my $montant = $_) =~ s/^(.{38})(.{11})(.*)$/$2/;
(my $signe = $_) =~ s/^(.{49})(.{1})(.*)$/$2/;
(my $axe1 = $_) =~ s/^(.{50})(.{7})(.*)$/$2/;
(my $axe2 = $_) =~ s/^(.{57})(.{18})(.*)$/$2/;
$natcompt = trim($natcompt);
$centcout = trim($centcout);
printf "Nature comptable : %s, Centre de coût : %s, Montant : %d, Signe : %s, Axe 1 : %s, Axe 2 : %s\n", $natcompt, $centcout, $montant, $signe, $axe1, $axe2;
}
}
close(TAR);
close(FILE); |
Résultat :
Citation:
Distributeur : 1000580
Nature comptable : 333333, Centre de coût : CC2, Montant : 60, Signe : -
, Axe 1 : MIG
, Axe 2 : RGP !RGP4
Nature comptable : 333333, Centre de coût : CC2, Montant : 70, Signe : -
, Axe 1 : MIG
, Axe 2 : RGP !RGP5
Distributeur : 1000580
Nature comptable : 111111, Centre de coût : CC2, Montant : 80, Signe : +
, Axe 1 : ACQ
, Axe 2 : RGP !RGP1
Pourriez-vous m'aider à trouver ce qui cloche ?
Cdt,
Rithy666