Perl foreach mais pas le dernier ;)
Résolu
sbouli
Messages postés
208
Statut
Membre
-
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
Bonjour,
Je voudrais écrire :
Champ1|Champ2|Champ3\r\n
et pas :
Champ1|Champ2|Champ3|\r\n
Comment éviter le | à la fin de la ligne après le dernier champ ....
Stéphane
Je voudrais écrire :
Champ1|Champ2|Champ3\r\n
et pas :
Champ1|Champ2|Champ3|\r\n
foreach (@$valeur) {
print FICHIER "$_|";
}
print FICHIER "\r\n";
Comment éviter le | à la fin de la ligne après le dernier champ ....
Stéphane
A voir également:
- Perl foreach mais pas le dernier ;)
- Le dernier iphone - Guide
- Oukitel dernier modèle - Guide
- Ouvrir le dernier onglet fermé - Guide
- Dernier message reçu aujourd'hui - Forum Mobile
- Comment voir le dernier appel reçu sur un fixe gigaset ✓ - Forum telephonie fixe
5 réponses
Salut,
Voici le résultat (maintenant c'est testé ;-)
J'ai corrigé les erreurs
Voici le résultat (maintenant c'est testé ;-)
J'ai corrigé les erreurs
lami20j@debian:~/trash$ cat ccm4.pl
#!/usr/bin/perl
while(my $e=<DATA>){
my @tableau=split /\s/,$e;
print map { "$_|" } @tableau[0..$#tableau-1];print "$tableau[-1]\r\n";
}
__END__
Champ1 Champ2 Champ3
lami20j@debian:~/trash$ perl ccm4.pl
Champ1|Champ2|Champ3
lami20j@debian:~/trash$
lami20j@debian:~/trash$
lami20j@debian:~/trash$ cat ccm5.pl
#!/usr/bin/perl
while(my $e=<DATA>){
my @tableau=split /\s/,$e;
print "$_|" foreach (@tableau[0..$#tableau-1]);print "$tableau[-1]\r\n";
}
__END__
Champ1 Champ2 Champ3
lami20j@debian:~/trash$ perl ccm5.pl
Champ1|Champ2|Champ3
lami20j@debian:~/trash$
lami20j@debian:~/trash$
lami20j@debian:~/trash$ cat ccm6.pl
#!/usr/bin/perl
while(my $e=<DATA>){
my @tableau=split /\s/,$e;
my $v=pop @tableau;print "$_|" foreach(@tableau);print "$v\r\n";push @tableau,$v;
}
__END__
Champ1 Champ2 Champ3
lami20j@debian:~/trash$ perl ccm6.pl
Champ1|Champ2|Champ3
lami20j@debian:~/trash$
lami20j@debian:~/trash$
lami20j@debian:~/trash$ cat ccm7.pl
#!/usr/bin/perl
while(my $e=<DATA>){
my @tableau=split /\s/,$e;
print join("|",@tableau[0..$#tableau-1],"$tableau[-1]");print "\r\n";
}
__END__
Champ1 Champ2 Champ3
lami20j@debian:~/trash$ perl ccm7.pl
Champ1|Champ2|Champ3
lami20j@debian:~/trash$
à par un if, je ne voi pas.
ou un truc dans le genre, mais je ne suis pas un expert en perl,
Une autre solution possible, serait d'utiliser backspace :
bonne chance
foreach (@$valeur) {
if($_!=$valeur[$#valeur]){print FICHIER "$_|";}
else{print FICHIER "$_";}
}
print FICHIER "\r\n";
ou un truc dans le genre, mais je ne suis pas un expert en perl,
Une autre solution possible, serait d'utiliser backspace :
foreach (@$valeur) {
print FICHIER "$_|";
}
print FICHIER "\b\r\n";
bonne chance
Salut,
Voici 4 possibilités. Je n'ai pas testé ;-)
Voici 4 possibilités. Je n'ai pas testé ;-)
print map { "$_|" } @tableau[0..$#tableau-1] , "$tableau[-1]\r\n";
print "$_|"; foreach (@tableau[0..$#tableau]) and print "$tableau[-1]\r\n";
$v=pop @tableau;print "$_|" foreach(@tableau);print "$v\r\n";push @tableau,$v;
print join("|",@tableau[0..$#tableau-1],"$tableau[-1]");print "\r\n";
[EDIT : le $#valeur renvoi -1 et pas la taille du tableau !!]
Au cas où ce serait lié, voici le code un peu plus complet ... :
avec %internautes dont le value est remplis par le tableau temp_internaute :
@$temp_internaute=($addr,$raisons{$raison},1,&datetime, "$revMsgDateStr $msgHr:$msgMin:00", 'null');
$internautes{$clef}=$temp_internaute;
Stéphane
Au cas où ce serait lié, voici le code un peu plus complet ... :
open(FICHIER,">>$fichier_path") or die ("Erreur lors de l'ecriture de $fichier_path") ;
while(my ($clef, $valeur) = each %internautes) {
foreach (@$valeur) {
print FICHIER "$_|";
}
print FICHIER "\r\n";
}
close(FICHIER);
avec %internautes dont le value est remplis par le tableau temp_internaute :
@$temp_internaute=($addr,$raisons{$raison},1,&datetime, "$revMsgDateStr $msgHr:$msgMin:00", 'null');
$internautes{$clef}=$temp_internaute;
Stéphane
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question