Comparaison de chaînes avec 4D v11 SQL

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   


Produit : 4D v11 SQL  ·  Plateforme : Windows, MacOSX


Dans les versions précédentes, il y a toujours eu deux manières de comparer les chaînes avec 4D :

· la commande Position
   ou
· l'opérateur de comparaison "="

4D v11 SQL supporte maintenant l'Unicode de manière native. Ce qui implique que toutes les comparaisons de chaîne doivent être conformes aux normes Unicode. Il y a certains caractères en particulier que 4D est forcé d'ignorer lors de la vérification d'une chaîne.

Voici un exemple qui illustre ce propos :

Code 4D
Sélectionnez

C_TEXTE($lhs;$rhs)
$lhs:="A"+Caractere(0)+"B"
$rhs:="A"+Caractere(3)+"B"

C_BOOLEEN($b)
$b:= ($lhs=$rhs)

Si ($b)
   ALERTE("Vrai")
Sinon
   ALERTE("Faux")
Fin de si

Avec 4D 2004, $b retournera Faux parce que Caractere(0) n'est pas le même que Caractere(3).
Selon l'Unicode, Caractere(0) est réservé et est exclu de la comparaison : $b retourne Vrai.
Et ce n'est qu'un exemple.


Le fait d'être sensible ou non à la casse et aux caractères diacritiques sont deux autres facteurs à prendre en considération.

La commande Position a été modifiée dans la version 4D v11 SQL pour pouvoir donner au développeur le contrôle complet sur la comparaison.
Précisément, le passage du paramètre "*" de la commande Position l'oblige à être sensible à la casse, aux signes diacritiques, et aux caractères "nulls".

Code 4D
Sélectionnez

C_TEXTE($lhs;$rhs)
$lhs:="A"+Caractere(0)+"B"
$rhs:="A"+Caractere(3)+"B"

C_ENTIER LONG($pos)
$pos:=Position($lhs;$rhs;*)

Si ($pos>0)
   ALERTE("Vrai")
Sinon
   ALERTE("Faux")
Fin de si

Le code ci-dessus retourne Faux parce que les deux caractères "nulls" ne correspondent pas.


Pour effectuer la comparaison sans tenir compte de la casse (mais en conservant la sensibilité aux caractères diacritiques et aux caractères "nulls"), il suffit d'utiliser les commandes Majuscule ou Minuscule pour standardiser les chaînes à comparer.

Code 4D
Sélectionnez

C_TEXTE($lhs;$rhs)
$lhs:="A"+Caractere(0)+"B"
$rhs:="A"+Caractere(3)+"b"

C_ENTIER LONG($pos)
$pos:=Position(Majusc($lhs);Majusc($rhs);*)

Si ($pos>0)
   ALERTE("Vrai")
Sinon
   ALERTE("Faux")
Fin de si

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2009 4D s.a.s. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.