Je suis sous Linux et j'utilise :
[normal@localhost perl]$ perl -v
This is perl, v5.8.3 built for i386-linux-thread-multi
Je trébuche sur de curieuses réponses de int :
#!/usr/bin/perl -w
$x=<STDIN>; #Plante avec $x=100.6565 ou 100.7575
print int($x*10000),"\n";
Pour les 2 valeurs proposées (100.6565 et 100.7575), les réponses sont
fausses ! Elles donnent 1006564 et 1007574. chomp n'y change rien.
J'ai voulu écrire un petit programme qui transforme des coordonnées ddd,mmss
en dd,dddd. En vérifiant mes résultats avec une calculatrice, j'ai constaté
cette erreur alors que je testais l'hypothèse un peu curieuse de
100°65'65". Avec n'importe quelle autre valeur de ddd, ça marche. Avec
100°, ça part en vrille.
Sur le site : http://postgis.refractions.net/CVS.txt,
je trouve :
2004-05-12 23:38 strk
* loader/shp2pgsql.c: DBFReadStringValue always used to workaround
shapelib bug with int values.
Y a-t-il un rapport avec mes interrogations ?, Si un bug a été décelé dans
int, comment faire pour le corriger ?
Merci et bon après-midi,
Dominique,
débutant en Perl et (grand) ancien en BASIC.
Le Sat, 24 Jul 2004 17:28:25 +0200, Dominique a écrit :
Y a-t-il un rapport avec mes interrogations ?, Si un bug a été décelé dans int, comment faire pour le corriger ?
Il faut utiliser les fonctions du module POSIX. C'est documenté. -- Patrick Texier
Dominique
Benoit Izac wrote:
pour une explication : perldoc -f int
Bonjour, Merci pour cette doc que je confesse avoir oublié de consulter. printf et sprintf se contentent de formater un affichage sans changer la valeur des variables. Je me trompe ? Si tel est le cas, ça ne répond pas à ma question : extraire de façon sûre ddd, mm et ss de ma variable ddd,mmss. Quelle solution pourriez-vous me suggérer ? J'ai cherché vers :
#!/usr/bin/perl -w print "Saisissez votre posiition en dd,mmss : ";$p=<STDIN>; $h=int($p); $m=(int(($p-$h)*100))/60; $s=($p*10000-int($p*100)*100)/3600; $pd=$h+$m+$s; print "Position en dd,ddd : $pd,n";
Les réponses sont généralement bonnes mais la fiabilité n'est pas là à cause de int.
Merci et bonne journée, Dominique PS : je suis débutant sous Perl et je n'en suis qu'à la page 57 de "Introduction à Perl" de chez O'Reilly. Beaucoup de subtilités m'échappent totalement. De plus, j'ai encore de gros restes du BASIC que j'ai très longtemps utilisé. Ca fausse les repères avec Perl.
Benoit Izac wrote:
pour une explication :
perldoc -f int
Bonjour,
Merci pour cette doc que je confesse avoir oublié de consulter.
printf et sprintf se contentent de formater un affichage sans changer la
valeur des variables. Je me trompe ? Si tel est le cas, ça ne répond pas à
ma question : extraire de façon sûre ddd, mm et ss de ma variable ddd,mmss.
Quelle solution pourriez-vous me suggérer ?
J'ai cherché vers :
#!/usr/bin/perl -w
print "Saisissez votre posiition en dd,mmss : ";$p=<STDIN>;
$h=int($p);
$m=(int(($p-$h)*100))/60;
$s=($p*10000-int($p*100)*100)/3600;
$pd=$h+$m+$s;
print "Position en dd,ddd : $pd,n";
Les réponses sont généralement bonnes mais la fiabilité n'est pas là à cause
de int.
Merci et bonne journée,
Dominique
PS : je suis débutant sous Perl et je n'en suis qu'à la page 57 de
"Introduction à Perl" de chez O'Reilly. Beaucoup de subtilités m'échappent
totalement. De plus, j'ai encore de gros restes du BASIC que j'ai très
longtemps utilisé. Ca fausse les repères avec Perl.
Bonjour, Merci pour cette doc que je confesse avoir oublié de consulter. printf et sprintf se contentent de formater un affichage sans changer la valeur des variables. Je me trompe ? Si tel est le cas, ça ne répond pas à ma question : extraire de façon sûre ddd, mm et ss de ma variable ddd,mmss. Quelle solution pourriez-vous me suggérer ? J'ai cherché vers :
#!/usr/bin/perl -w print "Saisissez votre posiition en dd,mmss : ";$p=<STDIN>; $h=int($p); $m=(int(($p-$h)*100))/60; $s=($p*10000-int($p*100)*100)/3600; $pd=$h+$m+$s; print "Position en dd,ddd : $pd,n";
Les réponses sont généralement bonnes mais la fiabilité n'est pas là à cause de int.
Merci et bonne journée, Dominique PS : je suis débutant sous Perl et je n'en suis qu'à la page 57 de "Introduction à Perl" de chez O'Reilly. Beaucoup de subtilités m'échappent totalement. De plus, j'ai encore de gros restes du BASIC que j'ai très longtemps utilisé. Ca fausse les repères avec Perl.
Benoit Izac
Bonjour,
le 25/07/2004 à 07:32, Dominique a écrit dans le message <cdvgm9$8v1$ :
pour une explication : perldoc -f int
printf et sprintf se contentent de formater un affichage sans changer la valeur des variables. Je me trompe ? Si tel est le cas, ça ne répond pas à ma question : extraire de façon sûre ddd, mm et ss de ma variable ddd,mmss. Quelle solution pourriez-vous me suggérer ?
#!/usr/bin/perl -w use strict;
my $reponse; my ($h, $m, $s) = (0, 0, 0);
while (1) { print "Saisissez votre posiition en dd.mmss : "; chomp ($reponse = <STDIN>); # verification que le format est correct unless ($reponse =~ /^(d*).?(d{0,2})(d{0,2})$/) { print "Vous n'avez pas entré un nombre correctn"; next; } if ($2 && $3 && ($2 >= 60 || $3 >`)) { print "les minutes et les secondes doivent être entre 0 et 59n"; next; }
$h = $1 if ($1 > 0); $m = $2 if ($2 > 0); $s = $3 if ($3 > 0);
le 25/07/2004 à 07:32, Dominique a écrit
dans le message <cdvgm9$8v1$1@news-reader1.wanadoo.fr> :
pour une explication :
perldoc -f int
printf et sprintf se contentent de formater un affichage sans changer
la valeur des variables. Je me trompe ? Si tel est le cas, ça ne
répond pas à ma question : extraire de façon sûre ddd, mm et ss de ma
variable ddd,mmss. Quelle solution pourriez-vous me suggérer ?
#!/usr/bin/perl -w
use strict;
my $reponse;
my ($h, $m, $s) = (0, 0, 0);
while (1) {
print "Saisissez votre posiition en dd.mmss : ";
chomp ($reponse = <STDIN>);
# verification que le format est correct
unless ($reponse =~ /^(d*).?(d{0,2})(d{0,2})$/) {
print "Vous n'avez pas entré un nombre correctn";
next;
}
if ($2 && $3 && ($2 >= 60 || $3 >`)) {
print "les minutes et les secondes doivent être entre 0 et 59n";
next;
}
$h = $1 if ($1 > 0);
$m = $2 if ($2 > 0);
$s = $3 if ($3 > 0);
le 25/07/2004 à 07:32, Dominique a écrit dans le message <cdvgm9$8v1$ :
pour une explication : perldoc -f int
printf et sprintf se contentent de formater un affichage sans changer la valeur des variables. Je me trompe ? Si tel est le cas, ça ne répond pas à ma question : extraire de façon sûre ddd, mm et ss de ma variable ddd,mmss. Quelle solution pourriez-vous me suggérer ?
#!/usr/bin/perl -w use strict;
my $reponse; my ($h, $m, $s) = (0, 0, 0);
while (1) { print "Saisissez votre posiition en dd.mmss : "; chomp ($reponse = <STDIN>); # verification que le format est correct unless ($reponse =~ /^(d*).?(d{0,2})(d{0,2})$/) { print "Vous n'avez pas entré un nombre correctn"; next; } if ($2 && $3 && ($2 >= 60 || $3 >`)) { print "les minutes et les secondes doivent être entre 0 et 59n"; next; }
$h = $1 if ($1 > 0); $m = $2 if ($2 > 0); $s = $3 if ($3 > 0);
Bonjour, J'ai voulu faire un copier-coller de ta proposition (où je suis obligé de confesser que tout ne m'est pas très compréhensible...) mais, visiblement, le passage par internet a dû modifier quelque chose : je trébuche sur des caractères (lesquels ???) non reconnus par Perl et Xemacs sur toutes les lignes. Pourrais-tu repasser ton script sur le forum en pièce jointe ou me l'adresser sur ma BAL : le-voileux hébergé par ouanadou en France. Merci et bonne journée, Dominique
Benoit Izac wrote:
Bonjour,
#!/usr/bin/perl -w
use strict;
my $reponse; etc...
Bonjour,
J'ai voulu faire un copier-coller de ta proposition (où je suis obligé de
confesser que tout ne m'est pas très compréhensible...) mais, visiblement,
le passage par internet a dû modifier quelque chose : je trébuche sur des
caractères (lesquels ???) non reconnus par Perl et Xemacs sur toutes les
lignes.
Pourrais-tu repasser ton script sur le forum en pièce jointe ou me
l'adresser sur ma BAL : le-voileux hébergé par ouanadou en France.
Merci et bonne journée,
Dominique
Bonjour, J'ai voulu faire un copier-coller de ta proposition (où je suis obligé de confesser que tout ne m'est pas très compréhensible...) mais, visiblement, le passage par internet a dû modifier quelque chose : je trébuche sur des caractères (lesquels ???) non reconnus par Perl et Xemacs sur toutes les lignes. Pourrais-tu repasser ton script sur le forum en pièce jointe ou me l'adresser sur ma BAL : le-voileux hébergé par ouanadou en France. Merci et bonne journée, Dominique