OVH Cloud OVH Cloud

Pb de conversion ?

5 réponses
Avatar
Frédéric
# Je cré un petit script qui récupère dans le fichier event, la date
# et l'évènement correspondant.

$ cat > event
26/04/2005<->Event today
27/04/2005<->Event today

#!/usr/bin/perl -w
#
$edate=`date "+%d/%m/%Y"`; # récupère la date courante

while(<STDIN>)
{
($date, $event) = split("<->", $_); # split le fichier en entré
if($date eq scalar $edate) { # compare la date du ficher à
# $edateA
print STDOUT "$event"; #
}
}

Et je ne comprends pas pourquoi à la date du 26/04/2005 l'évènement
correspondant ne s'imprime pas ?




--

5 réponses

Avatar
Nicolas George
Frédéric wrote in message <426e3e4c$0$7220$:
$edate=`date "+%d/%m/%Y"`; # récupère la date courante


print "edate=[$edate]n";

($date, $event) = split("<->", $_); # split le fichier en entré


print "=[$date]n";

Et je ne comprends pas pourquoi à la date du 26/04/2005 l'évènement
correspondant ne s'imprime pas ?


Avec ces deux lignes, la différence sera tout de suite évidente. Deux
remarques en plus :

- Il vaudrait mieux utiliser time, localtime et sprintf, ou directement
strftime, plutôt que de forker+exécuter date, c'est plus efficace et plus
robuste.

- Il vaut mieux écrire les dates sous la forme 2005-04-26, car ainsi un tri
lexicographique (sort simple) les classe également de manière
chronologique. L'écriture 26/04/2005 place le premier mai avant le deux
avril.

Avatar
Denis -esp2008-
Bonjour,

($date, $event) = split("<->", $_); # split le fichier en entré
Split prend en premier argument une expression rationnelle, donc '-' est

un caractère spécial. J'essaierai <->.

--
Denis

Avatar
Régis Caspar
Frédéric wrote:
# Je cré un petit script qui récupère dans le fichier event, la date
# et l'évènement correspondant.

$ cat > event
26/04/2005<->Event today
27/04/2005<->Event today

#!/usr/bin/perl -w
#
$edate=`date "+%d/%m/%Y"`; # récupère la date courante

while(<STDIN>)
{
($date, $event) = split("<->", $_); # split le fichier en entré
if($date eq scalar $edate) { # compare la date du ficher à
# $edateA
print STDOUT "$event"; #
}
}

Et je ne comprends pas pourquoi à la date du 26/04/2005 l'évènement
correspondant ne s'imprime pas ?


Bonjour,

Probablement parce qu'il manque un chomp après le "$edate = ..." et
également après le while :
#######################################################################
#!/usr/bin/perl

use strict;
use warnings;

# récupère la date courante
my $edate=`date "+%d/%m/%Y"`;
chomp $edate;

while(<>)
{
chomp;
# split le fichier en entrée
my ($date, $event) = split("<->", $_);
# compare la date du ficher à $edateA
print "$eventn" if ($date eq $edate);
}
exit;
#######################################################################

--
Régis Caspar

Avatar
Nicolas George
Denis -esp2008- wrote in message
:
Split prend en premier argument une expression rationnelle, donc '-' est
un caractère spécial.


- n'est pas un caractère spécial pour les expressions rationnelles de perl,
à part dans les classes de caractères.

J'essaierai <->.


C'est de toutes façons sans risque.

Avatar
Frédéric
In article <426e5087$0$29878$,
Régis Caspar <regis.caspar+ wrote:
Frédéric wrote:
# Je cré un petit script qui récupère dans le fichier event, la date
# et l'évènement correspondant.

$ cat > event
26/04/2005<->Event today
27/04/2005<->Event today

#!/usr/bin/perl -w
#
$edate=`date "+%d/%m/%Y"`; # récupère la date courante

while(<STDIN>)
{
($date, $event) = split("<->", $_); # split le fichier en entré
if($date eq scalar $edate) { # compare la date du ficher à
# $edateA
print STDOUT "$event"; #
}
}

Et je ne comprends pas pourquoi à la date du 26/04/2005 l'évènement
correspondant ne s'imprime pas ?


Bonjour,

Probablement parce qu'il manque un chomp après le "$edate = ..." et
également après le while :
#######################################################################
#!/usr/bin/perl

use strict;
use warnings;

# récupère la date courante
my $edate=`date "+%d/%m/%Y"`;
chomp $edate;

while(<>)
{
chomp;
# split le fichier en entrée
my ($date, $event) = split("<->", $_);
# compare la date du ficher à $edateA
print "$eventn" if ($date eq $edate);
}
exit;
#######################################################################

--
Régis Caspar


Merci à chacun pour vos précieux conseils. Le Perl c'est quand même
plus exigent que le awk :-)

Frédéric
--