Bon, je m'en suis sorti avec le module DATA::Types du CPAN, en mélangeant les regex et is_int().
Pour ceux qui voudraient d'en servir, il n'y a pas d'exportation automatique, l'appel de is_int se fait par :
use DATA::Types qw/is_int/;
Bonne journée à tous.
C. Tobini
Paul Gaborit
À (at) 6 Apr 2006 05:58:56 -0700, "ctobini" écrivait (wrote):
Bon, je m'en suis sorti avec le module DATA::Types du CPAN, en mélangeant les regex et is_int().
Pour ceux qui voudraient d'en servir, il n'y a pas d'exportation automatique, l'appel de is_int se fait par :
use DATA::Types qw/is_int/;
C'est un module bien élevé ! Il n'exporte que ce qu'on lui demande explicitement d'exporter et ne pollue donc pas intempestivement votre espace de nommage.
Tous les modules devraient faire de même...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Bon, je m'en suis sorti avec le module DATA::Types du CPAN, en
mélangeant les regex et is_int().
Pour ceux qui voudraient d'en servir, il n'y a pas d'exportation
automatique, l'appel de is_int se fait par :
use DATA::Types qw/is_int/;
C'est un module bien élevé ! Il n'exporte que ce qu'on lui demande
explicitement d'exporter et ne pollue donc pas intempestivement votre
espace de nommage.
Tous les modules devraient faire de même...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 6 Apr 2006 05:58:56 -0700, "ctobini" écrivait (wrote):
Bon, je m'en suis sorti avec le module DATA::Types du CPAN, en mélangeant les regex et is_int().
Pour ceux qui voudraient d'en servir, il n'y a pas d'exportation automatique, l'appel de is_int se fait par :
use DATA::Types qw/is_int/;
C'est un module bien élevé ! Il n'exporte que ce qu'on lui demande explicitement d'exporter et ne pollue donc pas intempestivement votre espace de nommage.
Tous les modules devraient faire de même...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
ctobini
Bonsoir,
Je suis tout à fait d'accord, il n'empêche qu'en débutant, ce n'est pas forcément un réflex :)
C. Tobini
Bonsoir,
Je suis tout à fait d'accord, il n'empêche qu'en débutant, ce n'est
pas forcément un réflex :)
Je voudrais parser un fichier CSV avec certaines lignes comme :
Valeurs;10;12;15;26
Je suis en train de me casser la tête pour avoir une expression régulière:
si la ligne contient un motif ";quelque_chose_qui_n_est_pas_un_entier;"
mais je crois qu'il n'y a pas moyen de distinguer un entier d'un flottant en Perl.
Auriez-vous un conseil là-dessus ?
En vous remerciant,
C. Tobini
unless ($s =~ /d/) { # non ??? }
ctobini
Bonjour,
En fait non car d représente un seul nombre et d+ un entier ou flottant, je ne suis pas arrivé à m'en tirer de cette manière :)
De plus je suis sur un fichier CSV avec des répétitions d'entiers et flottants, le regex est inclus dans un while(), je trouve la méthode is_int() beaucoup plus directe dans mon cas.
C. Tobini
Bonjour,
En fait non car d représente un seul nombre et d+ un entier ou
flottant, je ne suis pas arrivé à m'en tirer de cette manière :)
De plus je suis sur un fichier CSV avec des répétitions d'entiers et
flottants, le regex est inclus dans un while(), je trouve la méthode
is_int() beaucoup plus directe dans mon cas.
En fait non car d représente un seul nombre et d+ un entier ou flottant, je ne suis pas arrivé à m'en tirer de cette manière :)
De plus je suis sur un fichier CSV avec des répétitions d'entiers et flottants, le regex est inclus dans un while(), je trouve la méthode is_int() beaucoup plus directe dans mon cas.
C. Tobini
Stephane Zuckerman
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools.
En fait non car d représente un seul nombre et d+ un entier ou flottant, je ne suis pas arrivé à m'en tirer de cette manière :)
Pardon ?
d est équivalent à [0-9], donc l'ensemble des caractères « numériques » allant de '0' à '9'. Donc d+ équivaut à [0-9]+.
Bref, pour pouvoir repérer des flottants, il faudrait rajouter quelque chose du genre
d+(.d*) ou d(.d+)
et d+ permet de capturer un entier comme il faut.
De plus je suis sur un fichier CSV avec des répétitions d'entiers et Je ne vois pas trop le rapport. Une ligne de fichier CSV, ça se split()e,
non ?
flottants, le regex est inclus dans un while(), je trouve la méthode is_int() beaucoup plus directe dans mon cas.
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead) --698110915-310099441-1144398475=:299901--
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
En fait non car d représente un seul nombre et d+ un entier ou
flottant, je ne suis pas arrivé à m'en tirer de cette manière :)
Pardon ?
d est équivalent à [0-9], donc l'ensemble des caractères « numériques »
allant de '0' à '9'. Donc d+ équivaut à [0-9]+.
Bref, pour pouvoir repérer des flottants, il faudrait rajouter quelque
chose du genre
d+(.d*) ou d(.d+)
et d+ permet de capturer un entier comme il faut.
De plus je suis sur un fichier CSV avec des répétitions d'entiers et
Je ne vois pas trop le rapport. Une ligne de fichier CSV, ça se split()e,
non ?
flottants, le regex est inclus dans un while(), je trouve la méthode
is_int() beaucoup plus directe dans mon cas.
--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)
--698110915-310099441-1144398475=:299901--
En fait non car d représente un seul nombre et d+ un entier ou flottant, je ne suis pas arrivé à m'en tirer de cette manière :)
Pardon ?
d est équivalent à [0-9], donc l'ensemble des caractères « numériques » allant de '0' à '9'. Donc d+ équivaut à [0-9]+.
Bref, pour pouvoir repérer des flottants, il faudrait rajouter quelque chose du genre
d+(.d*) ou d(.d+)
et d+ permet de capturer un entier comme il faut.
De plus je suis sur un fichier CSV avec des répétitions d'entiers et Je ne vois pas trop le rapport. Une ligne de fichier CSV, ça se split()e,
non ?
flottants, le regex est inclus dans un while(), je trouve la méthode is_int() beaucoup plus directe dans mon cas.
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead) --698110915-310099441-1144398475=:299901--
ctobini
J'utilise une boucle :
while (/;(.*);/g) { if (!is_int($&)) { action; last } }
Car les utilisateurs sont censés saisir un entier mais peuvent saisir n'importe quoi, donc, je préfère utiliser !is_int() plutôt que :
if ($& =~ /d+/ && $& !~ /[.,]/)
Je trouve ça plus commode mais je ne suis pas un gourou.
C. Tobini
J'utilise une boucle :
while (/;(.*);/g) {
if (!is_int($&)) {
action;
last
}
}
Car les utilisateurs sont censés saisir un entier mais peuvent saisir
n'importe quoi, donc, je préfère utiliser !is_int() plutôt que :
if ($& =~ /d+/ && $& !~ /[.,]/)
Je trouve ça plus commode mais je ne suis pas un gourou.