OVH Cloud OVH Cloud

problème regex et type de variable

9 réponses
Avatar
C. Tobini
Bonjour,

J'ai un petit problème avec un test d'égalité :

j'ai un fichier CSV dont j'extrais les lignes afin de faire des
opérations sur les chiffres contenus.

Ex :

une ligne en entrée : 32;34;B0003;15;100
un premier regex pour éliminer les sauts de lignes $ligne =~ s/\s$//;
puis $ligne =~ /^\d+;\d+;\w+;(\d+);(\d+)$/
$valeur1 = $1;
$valeur2 = $2;
print "OK\n" if ($valeur1 < $valeur2);
Ne marche pas du tout, en revanche > marche tout le temps.

J'ai essayé de faire un cast avec int($1) et int($2) dans l'affectation
des valeurs mais rien n'y fait.

De plus, une valeur comme -100 n'est pas reconnue comme chiffre.

Merci si vous pouvez m'aider.

C. Tobini

9 réponses

Avatar
Nicolas George
"C. Tobini" wrote in message
<41fbddc2$0$18851$:
une ligne en entrée : 32;34;B0003;15;100
un premier regex pour éliminer les sauts de lignes $ligne =~ s/s$//;
puis $ligne =~ /^d+;d+;w+;(d+);(d+)$/
$valeur1 = $1;
$valeur2 = $2;
print "OKn" if ($valeur1 < $valeur2);
Ne marche pas du tout, en revanche > marche tout le temps.


La première chose à faire aurait été de faire un print sur $valeur1 et
$valeur2.

J'ai essayé de faire un cast avec int($1) et int($2) dans l'affectation
des valeurs mais rien n'y fait.


Inutile, < est toujours une comparaison numérique en perl (sauf si une
surcharge a été faite, mais c'est assez anecdotique).

De plus, une valeur comme -100 n'est pas reconnue comme chiffre.


« -100 » ne respecte pas l'expression rationnelle d+, de toute évidence.

Avatar
atchoum
un premier regex pour éliminer les sauts de lignes $ligne =~ s/s$//;
faire "chomp($ligne)"


puis $ligne =~ /^d+;d+;w+;(d+);(d+)$/
De plus, une valeur comme -100 n'est pas reconnue comme chiffre.


$ligne =~ /^d+;d+;w+;(-?d+);(-?d+)/

Merci si vous pouvez m'aider.
Avec plaisir

Jean-Pierre

Avatar
C. Tobini
Bonjour Nicolas et merci de ta réponse,

Nicolas George wrote:
La première chose à faire aurait été de faire un print sur $valeur1 et
$valeur2.


Je l'ai évidemment fait, et là les valeurs sont ok.

J'ai essayé de faire un cast avec int($1) et int($2) dans l'affectation
des valeurs mais rien n'y fait.
Inutile, < est toujours une comparaison numérique en perl (sauf si une

surcharge a été faite, mais c'est assez anecdotique).


Là je ne savais pas, merci.

De plus, une valeur comme -100 n'est pas reconnue comme chiffre.
« -100 » ne respecte pas l'expression rationnelle d+, de toute évidence.



Ce n'est évidemment que lorsqu'on s'apperçoit que ça ne marche pas,
maintenant, je ne vois pas pourquoi il est évident que -100 n'est pas un
nombre (?).

C. Tobini


Avatar
C. Tobini
A tes souhaits :-) et merci de ta réponse,

atchoum wrote:
faire "chomp($ligne)"


Je bosse aussi sous Cygwin et le chomp a tendance à ne pas marcher
certaines fois.

$ligne =~ /^d+;d+;w+;(-?d+);(-?d+)/


Merci ça marche nickel !

A +

C. Tobini

Avatar
Nicolas George
"C. Tobini" wrote in message
<41fcf401$0$18855$:
Ce n'est évidemment que lorsqu'on s'apperçoit que ça ne marche pas,
maintenant, je ne vois pas pourquoi il est évident que -100 n'est pas un
nombre (?).


C'est évident que « - » n'est pas un chiffre.

Avatar
C. Tobini
Nicolas George wrote:
C'est évident que « - » n'est pas un chiffre.


Bon, je suis d'accord :-)

Mais puisqu'on est dans de l'interpolation, pourquoi - et suivi de d+
ne serait pas un nombre négatif ?

C. Tobini

PS : discussion de comptoir :-)

Avatar
Nicolas George
"C. Tobini" wrote in message
<41fd4578$0$2175$:
Mais puisqu'on est dans de l'interpolation, pourquoi - et suivi de d+
ne serait pas un nombre négatif ?


Il y avait marqué « d+ », pas « - suivi de d+ ».

Avatar
Sébastien Bourgasser
Nicolas George wrote:

C'est évident que « - » n'est pas un chiffre.



Bon, je suis d'accord :-)

Mais puisqu'on est dans de l'interpolation, pourquoi - et suivi de d+
ne serait pas un nombre négatif ?



Bonsoir,

Parce que d ne signifie pas "nombre" mais "caractère numérique". Or "-"
n'est pas un caractère numérique.

A+

--
Séb
.


Avatar
C. Tobini
Sébastien Bourgasser wrote:
Parce que d ne signifie pas "nombre" mais "caractère numérique". Or "-"
n'est pas un caractère numérique.

A+


Tout s'explique... :-)

Merci.

C. Tobini