4D Language – Amélioration de la comparaison des chaînes de caractères

Traduit automatiquement de Deepl

Le langage 4D offre plus de 20 commandes pour manipuler les chaînes de caractères. Et avec 4D v18 R6, 4D introduit une nouvelle commande : Compare strings. Et une autre commande a été améliorée : Position. Ces deux commandes vous permettent d’utiliser des options pour obtenir des résultats plus précis. Apprenez-en davantage !

HDI : Amélioration de la comparaison de chaînes de caractères.

Position

La commande bien connue, Position, permet de trouver la position d’un texte dans un autre texte. Elle ne propose que deux options : position de départ et correspondance exacte, basée sur le code des caractères. A partir de 4D v18 R6, vous disposez désormais de plus de possibilités de comparaison telles que « sensible à la casse » ou « sensible aux accents ». La langue japonaise n’a pas été oubliée non plus ! Hiragana/Katakana et la largeur des caractères sont également disponibles comme options de recherche. Il est également possible de rechercher le « mot entier ».

Commençons par le début.

La première option est « stricte ». Elle prend en compte les majuscules, les accents, etc., ainsi que les spécificités des langues. En allemand, par exemple, on peut considérer que « ß » est identique à « ss ». En français, œ et æ sont équivalents à « oe » et « ae ».

Les autres options disponibles parlent d’elles-mêmes. Les options « insensible à la casse » et « insensible aux accents » vous permettent d’ignorer les accents et les majuscules. Pour le japonais, « kana insensitive » ignore les différences entre katakana et hiragana, et « width insensitive » ignore la largeur des caractères.

La dernière option (très utile) permet d’ignorer des parties de mots pour ne trouver que des mots complets (entiers).

Quelques exemples

$p:=Position ("maison" ; "j'ai fait mes devoirs";0 ;$length;sk whole word")
// returns zero ! home is not a whole word in this case.

$p:=Position ("Home" ; "I have done my homework";0 ;$length;sk case insensitive")
// returns 16; the capital "H" is considered equal to letter "h"

$p:=Position ("Joao" ; "J'ai un ami qui s'appelle João";0 ;$length;sk accent insensitive")
// returns 23; the accentuated letter "ã" is considered equal to letter "a"

Ces options peuvent être cumulées !

$p:=Position ("joao" ; "J'ai un ami nommé João";0;$length ;sk case insensitive + sk accent insensitive")
// also returns 23; the accentuated letter "ã" is considered equal to letter "a" AND letter "J" is considered equal to letter "j"

Comparer des chaînes de caractères

La nouvelle commande Compare strings permet de comparer des chaînes de caractères avec les mêmes options que celles ajoutées à la commande Position. Cette commande est basée sur la langue définie dans les paramètres de la base de données. Cela peut être très utile pour permettre des tris spécifiques, par exemple.

La commande renvoie :

  • zéro (0) si les chaînes de caractères sont considérées comme identiques (en fonction des critères passés en options).
  • une valeur négative ou positive si la première chaîne est triée avant ou après la seconde.

Quelques exemples

Dans l’exemple ci-dessous, $result renvoie « 1 » parce que « a » est considéré comme plus grand que « A ». Pas par sa taille, mais par son code de caractère !
Rappel : sk char code rend la comparaison indépendante de la langue.

$result:=Compare strings("alpha" ; "Alpha" ; sk char codes)

Cette fois, $result renvoie « 0 » car les minuscules et les majuscules doivent être considérées comme identiques, grâce à l’option sk case insensitive.
Rappel : sk case insensitive rend la comparaison dépendante de la langue.

$result:=Compare strings("un arbre" ; "Un arbre" ; sk case insensitive)

Conclusion

Jetez un coup d’œil à l’IDH ci-dessus et voyez comment ces nouvelles options peuvent être utilisées.

Si vous avez besoin de gérer des recherches ou des tris spécifiques dans vos données, elles vous seront sûrement très utiles. Pour en savoir plus sur ces commandes, consultez la documentation : compare strings et position.

Et n’oubliez pas de rejoindre la discussion sur le forum 4D!

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.