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 :
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 est 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".
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.
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