Date: prev next · Thread: first prev next last
2010 Archives by date, by thread · List index


Le 20/10/2010 16:51, Olivier R. a écrit :
Bonjour,

Le 20/10/2010 16:13, Yannick VOYEAUD a écrit :

Cela je l'ai bien compris. Il faut un code à chaque lettre.
Il y a les 'lettres' standards et les mêmes lettres accompagnées.
Chacune a son code. Que ce code ne soit pas linéaire peut se comprendre.
Les anglophones ont imposés leurs critères créant une belle pagaille
pour les autres mais c'est comme cela et il faut faire avec maintenant.

Sauf qu’en l’occurrence, même si les codes caractères suivaient une
logique linéaire entre les caractères affiliés, ça ne résoudrait
aucunement votre problème, puisque dans la logique du tri naturel les
caractères affiliés (comme e, é, è, ê et ë) doivent avoir une valeur
_identique_. Même avec une valeur proche, ça ne fonctionnerait pas.


Je pense à un truc du genre Lettre bizarre ==> Lettre normale

Oui, il faut créer une table d’association pour transcrire chaque
caractère avec diacritique ou ligature en élément simplifié
(c’est-à-dire en lettre ASCII).

Comme c’est une chose que j’ai fait moi-même pour l’établissement du
dictionnaire (trié naturellement, avec une sensibilité sur la casse), je
vous donne le code en Python 3:


dCHARREP = { 'à': 'a', 'À': 'a', 'â': 'a', 'Â': 'a', 'ä': 'a',
'Ä': 'a', 'å': 'a', 'Å': 'a', 'ç': 'c', 'Ç': 'c',
'é': 'e', 'É': 'e', 'è': 'e', 'È': 'e', 'ê': 'e',
'Ê': 'e', 'ë': 'e', 'Ë': 'e', 'î': 'i', 'Î': 'i',
'ï': 'i', 'Ï': 'i', 'ñ': 'n', 'ô': 'o', 'Ô': 'o',
'ö': 'o', 'Ö': 'o', 'ù': 'u', 'Ù': 'u', 'û': 'u',
'Û': 'U', 'ü': 'u', 'Ü': 'U', 'ÿ': 'y',
'æ': 'ae', 'Æ': 'ae', 'œ':'oe', 'Œ': 'oe',
'-': None, '.': None, "'": None }

CHARMAP = str.maketrans(dCHARREP)


Ensuite, il suffit, lorsqu’on veut comparer des entrées, de faire une
comparaison sur des chaînes transcrites. On transcrit une chaîne «myvar»
avec:

myvar.translate(CHARMAP)

Si vous avez d’autres caractères à trier, il suffit de les ajouter dans
le dictionnaire dCHARREP.

Mais bon, c’est du Python, c’est simple et puissant. Après il faut
programmer ça en C++. Vingt fois plus de lignes à écrire, et des maux de
tête en prime. ;)


Cordialement,

Bonsoir,

N'étant pas programmeur je ne vois pas ce que je peux apporter de plus à ce que Olivier vient de donner. Peut-être le code en lieu et place des lettres et encore je suis convaincu qu'une routine existe déjà pour convertir.

Amitiés

--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire (Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Créateur CimGenWeb: http://www.francegenweb.org/cimgenweb/
Journées du Logiciel Libre: http://jdll.org


--
E-mail to discuss+help@fr.libreoffice.org for instructions on how to unsubscribe
List archives are available at http://fr.libreoffice.org/lists/discuss/
All messages you send to this list will be publicly archived and cannot be deleted

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.