Fonctions de collation en C

Fonctions de collation en C
La collation est un processus très important de disposition des caractères et permet à la fois que le système et l'utilisateur comprennent ou affichent correctement les textes, les pages Web et les programmes quel que soit l'alphabet utilisé ou la région dans laquelle ils ont été écrits et leurs différences alphabétiques.

Les algorithmes de tri des personnages sont assez longs et lourds à expliquer. Par conséquent, en ce Indice de linux Article, nous donnerons un bref aperçu du codage et du tri des personnages en fonction de diverses données locales. Nous expliquerons ensuite comment utiliser les deux fonctionnalités de base que C fournit pour gérer les chaînes de caractère en fonction de la langue et de la collation des différentes données locales utilisées dans l'informatique.

Il est très important de préciser que le codage Unicode est un codage multi-octet, donc un personnage peut occuper plusieurs «caractères». Bien que, dans cet article, nous verrons les deux fonctions de base pour gérer les caractères avec collation dans les données de type «char». Le «WCHAR.L'en-tête h ”définit les caractères multi -yte et fournit des fonctions similaires pour gérer les caractères de grande taille.

Encodage de caractère

Le codage des caractères est l'attribution d'une valeur numérique binaire représentative à chaque caractère alphabétique, symbole, caractère spécial ou caractère de contrôle

Le code ASCII est l'une des langues «I» C la plus simple et la plus utilisée. C'est le codage que nous utilisons habituellement pour les caractères de type «char» que nous mettons dans les cordes. Ce codage utilise un seul octet par caractère, 7 bits pour représenter chaque caractère de la plupart des alphabets occidentaux, ainsi que leur contrôle et leurs caractères spéciaux. Le bit restant est utilisé pour la vérification de la parité lors de la détection des erreurs. Dans la version étendue, les 8 bits sont utilisés pour représenter les caractères supplémentaires.

Alors que ASCII répondait aux exigences de la plupart des alphabets latins occidentaux, il ne l'a pas fait pour les alphabets orientaux. Le codage Unicode comprend tous les caractères des alphabets de toutes les langues occidentales et orientales. C'est pourquoi il est actuellement l'un des plus utilisés, grâce à sa portabilité dans le codage de texte, sa flexibilité et sa compatibilité avec le code ASCII.

Cet ensemble étendu de caractères codés est divisé en groupes, chacun ayant un ordre lexicographique spécifique pour former l'alphabet pour chaque langue ou région.

Collation de caractères

La portabilité et l'échange d'informations signifient souvent que nous devons traiter les caractères et les fichiers écrits dans une autre région. L'ordre lexicographique des personnages utilisés dans l'alphabet qui les a créés ne correspond pas à celui qui est utilisé par notre système.

Un exemple de cela est la différence entre l'alphabet latin qui a 26 lettres et l'alphabet espagnol qui a 27 lettres. Dans l'alphabet latin, la lettre qui suit le «N» est le «O». Mais dans l'alphabet espagnol, il est suivi de «ñ». Ensuite, nous voyons un tableau avec ces lettres et leur nombre décimal de représentation en ASCII:

Anglais Espagnol
N 110 N 110
O 111 Ñ 165

Ces différences permettent de réorganiser les caractères en fonction de l'alphabet et de la zone dans laquelle le texte doit être interprété.

Données locales du système d'exploitation

Chaque fois que nous allumons notre ordinateur, Linux charge un ensemble de paramètres prédéfinis définis lors de l'installation ou modifiés ultérieurs par l'utilisateur qui détermine la langue, le codage, le type de caractères utilisés et les règles de tri pour la région. Cela détermine comment le texte est rendu et affiché par le système

Ces paramètres sont appelés données locales. Nous pouvons les afficher dans la console Linux en utilisant la commande suivante:

~ $ locale

Cette commande s'affiche dans la console. Entre autres choses, les paramètres des données locales du système, du langage, du codage des caractères et du tri pour cette région.

Comme nous pouvons le voir sur la figure, le codage de la langue régionale anglaise des États-Unis est en_us.UTF-8. Pour voir la liste des différentes données et encodages locaux installés dans notre système d'exploitation, nous devons exécuter la commande suivante:

~ $ locale -a

La figure suivante montre la liste des données locales qui sont installées dans le système d'exploitation.

Notez que même si la langue est la même pour toutes les options, dans ce cas, l'anglais (EN), les paramètres d'encodage et de tri ne sont pas. Celui pour les États-Unis est «en_us» tandis que celui du Canada est «en_ CA».

Comment sélectionner les données locales d'un programme avec la fonction setLocale () dans la langue C

Les mêmes paramètres qui sont renvoyés par la commande «~ $ Locale» dans la console Linux sont définis dans le «lieu.H ”En-tête en C avec syntaxe et représentation identiques et peut être modifié dans l'instance locale avec la fonction setLocale.

Syntaxe de la fonction setLocale () dans le langage C

char * setlocale (catégorie int, char * local)

Description de la fonction setLocale () dans la langue C

La fonction setLocale () sélectionne les données locales que le programme que nous compilons utilise. Nous pouvons également vérifier la configuration actuelle. Si ces paramètres ne sont pas définis par cette fonction dans le code, le programme par défaut en utilisant les données locales du système sur lequel il s'exécute.

Ensuite, examinons la liste des paramètres les plus importants que le setLocale () modifie ou les requêtes qui affectent le processus de langue et de tri:

LANGUE= Modifie ou consulte la langue locale.

LC_CTYPE= Spécifie ou interroge le type de caractères pour le lieu.

LC_NUMERIC= Spécifie ou interroge le type de caractères numériques.

Lc_time= Spécifie ou interroge le calendrier et les données de temps pour le paramètre local.

LC_Collate= Spécifier ou interroger les règles de collation de caractère.

LC_ALL= Spécifie ou interroge l'ensemble de données locales.

La fonction strXfrm () est définie dans la «chaîne.en-tête h ”. Pour l'utiliser, nous devons l'inclure dans notre code comme suit:

#inclure

Comment interroger la configuration locale actuelle du système avec la fonction setLocale () en C

La fonction SetLocale offre la possibilité de modifier les données locales en général ou chacun de ses paramètres individuellement. Il offre également la possibilité de demander la configuration utilisée.

Pour ce faire, nous devons appeler la fonction setLocale () et passer le paramètre que nous voulons interroger comme premier argument d'entrée et une chaîne vide comme deuxième argument.

La fonction setLocale () renvoie le pointeur vers une chaîne qui contient le nom des données locales actuelles. Voici le code qui interroge la configuration actuelle et l'affiche dans la console de commande:

#inclure
#inclure
#inclure
void main ()
char * c_ptr;
c_ptr = setlocale (lc_all, "");
printf ("\ n \ ncurrent Le paramètre de données local est:% s \ n \ n", c_ptr);

Comme le montre l'image suivante, SetLocale renvoie une chaîne avec le paramètre régional actuel:

Comment sélectionner la configuration locale et de collation actuelle avec la fonction setLocale () en C

La fonction setLocale () peut être utilisée pour sélectionner ou modifier les données locales en général avec «LC _all» ou via les paramètres individuels pour effectuer la collation des caractères en fonction de la plage que nous choisissons.

Pour ce faire, nous devons appeler la fonction setLocale () et passer le paramètre que nous voulons modifier comme premier argument et une chaîne avec la configuration locale que nous voulons sélectionner comme deuxième argument.

Voici le code pour sélectionner le Collation des paramètres régionaux encodés de l'UTF-8:

#inclure
#inclure
#inclure
void main ()
setlocale (lc_all, "en_ca.UTF-8 ");

Comme nous l'avons vu jusqu'à présent, le tri est complètement lié aux paramètres régionaux sélectionnés. Ensuite, regardons les deux fonctions fournies par le langage C pour gérer les chaînes en fonction de la configuration locale choisie: strXfrm () et strcoll ().

StrxFrm () Fonction dans le langage C

Syntaxe:

int strxfrm (char * s1, char * s2, int n)

Description de la fonction strXfrm () dans le langage C

La fonction strXfrm () copie la chaîne "S2" avec des caractères "n" et le stocke pour le convertir en "S1" dans la collation du paramètre qui est sélectionné avec SetLocale (). Si le paramètre des paramètres régionaux n'est pas sélectionné précédemment avec SetLocale (), la collation est basée sur le paramètre système actuel.

La fonction strXfrm () renvoie un entier avec le nombre de caractères que prend la nouvelle chaîne car le nombre de caractères dans la collation peut être plus ou moins que celui de la chaîne d'origine.

La fonction strXfrm () fonctionne de manière similaire à la fonction strcpy (), sauf qu'elle nous permet de spécifier les règles de configuration de zone que la nouvelle chaîne doit retourner. Cela ajoute de la flexibilité à l'utilisation de cette fonction car nous pouvons utiliser SetLocale () et StrxFrm () pour convertir les chaînes avec les paramètres régionaux que nous choisissons, ainsi que pour les créer.

La fonction strXfrm () est définie dans la «chaîne.en-tête h ”. Pour l'utiliser, nous devons l'inclure dans notre code comme suit:

#inclure

Comment convertir une chaîne avec un paramètre régional et un ordre de tri spécifique en utilisant la fonction StrxFrm () en C

Dans cet exemple, nous créons la chaîne "STR_2" avec des données locales des États-Unis et la convertit en chaîne "STR_1" avec des données locales configurées pour l'Espagne.

Pour ce faire, nous utilisons le setLocale () pour définir l'ordre de tri pour les paramètres régionaux de l'Espagne lc _Collate = ”es_ es”. Nous convertissons "str_2" en chaîne "str_1" avec strXfrm (). Vous pouvez trouver le code à cet effet dans l'illustration suivante:

#inclure
#inclure
#inclure
void main ()
char str_1 [100];
char str_2 [100];
int cn;
cn = strcpy (str_2, "linux hint");
setLocale (lc_all, "sp_sp");
cn = strXfrm (str_1, str_s, cn);

Strcoll () Fonction dans le langage C

Syntaxe:

int strcoll (char * s1, char * s2)

Description de la fonction strcoll () dans le langage C

La fonction Strcoll () compare la chaîne «S2» avec la chaîne «S1» basée sur la collation du lieu sélectionné avec SetLocale (). Si le paramètre des paramètres régionaux n'est pas sélectionné précédemment avec SetLocale (), la collation est basée sur le paramètre système actuel.

La fonction strcoll () renvoie un entier égal à 0 si les chaînes sont égales. Le résultat est supérieur à 0 si S2 est supérieur à S1. Le résultat est inférieur à 0 s'il est inférieur à S1.

Cette fonction fonctionne de manière similaire à strcmp () avec la différence que nous pouvons l'utiliser pour spécifier quelles règles de configuration de zone que les chaînes doivent être comparées.

La fonction strcoll () est définie dans la «chaîne.en-tête h ”. Pour l'utiliser, nous devons l'inclure dans notre code comme suit:

#inclure

Comparez deux chaînes en utilisant la configuration de tri spécifique avec la fonction strcoll () en C

Dans cet exemple, nous comparons la chaîne "STR_2" avec la chaîne "STR_1" en utilisant une configuration de tri spécifique. Dans ce cas, c'est l'espagnol d'Argentine, à savoir «ES_ AR».

À cette fin, nous créons deux chaînes qui contiennent le même texte, sauf que «str_2» a un accent sur la cinquième lettre. L'accent est un symbole sur une lettre utilisée en espagnol, donc le glyphe pour ce caractère est différent. Ensuite, nous définissons le lieu de l'Argentine et comparons les chaînes avec la fonction strcoll (). Nous stockons le résultat dans l'entier «CN» et le faisons à la console de commande avec printf ().

Ce qui suit est le code de cette comparaison:

#inclure
#inclure
#inclure
void main ()
char str_1 [100] = "Hello World";
char str_2 [100] = "Hellor World";
int cn;
setLocale (lc_all, "es_ar");
cn = strcoll (str_1, str_2);
printf ("% i", cn);

Conclusion

Dans cet article de Linux Hint, nous avons brièvement expliqué ce que le codage des personnages signifie en informatique afin que vous ayez une idée plus claire de ce que le codage des personnages signifie en fonction des configurations locales utilisées par les systèmes informatiques. Ensuite, nous vous avons montré comment utiliser les deux fonctionnalités de base que le langage C fournit pour gérer les chaînes de collation de caractère. Nous espérons que cet article vous sera utile. Pour plus d'articles sur la langue C et les conseils Linux, utilisez le moteur de recherche du site.