CLASSEMENT DE 2 CHAINES PAR ORDRE LEXICOGRAPHIQUE (ALPHABETIQUE)

Signaler
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/7248-classement-de-2-chaines-par-ordre-lexicographique-alphabetique

Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
Renfield> super pour tes codes ! merci !

son dernier code, celui pour trier des tableaux entiers de mots, prends en compte aussi les accents.

dpouliot> ton exemple, est résolu correctement avec son code.

merci, c juste ce que je cherchai
Messages postés
50
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
4 novembre 2008

À GeneticWolf : Fait le test avec ce code et dit moi si depuis VB 3.0
les accentués sont bien géré.

Dim chaine1 As String
Dim chaine2 As String

chaine1 = "Servante"
chaine2 = "École"

If chaine1 < chaine2 Then
MsgBox "La chaine 1 vient avant"
Else
MsgBox "La chaine 2 vient avant"
End If

Cette comparaison n'est pas correct.
Messages postés
3
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
29 mai 2003

très joli, mais très peu productif. Depuis VB 3.0, on peut directement faire:

if chaine1$ < Chaine2$ then
msgbox "La chaine 1 vient avant"
else
...
Messages postés
50
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
4 novembre 2008

Salut,
Bon prog. Mais il y a le problème des accentués et des majuscules.
Faites le test avec "Élève" et "Servante" sans parler des "ae". "oe".
La solution est de redresser tous les caractères et d'ignorer ceux qui n'en sont pas ex.: le trait d'union, l'apostrophe...

Voici le code, Nb. vérifier la correspondance des caractères en fonctions de la grille utilisée par votre ordinateur.

Dans la fonction Class, Ajouter après celles de trim
Str1 = cnv_pauvre(Str1)
Str2 = cnv_pauvre(Str2)

ET ajouter cette fonction

Function cnv_pauvre(ch_in As String) As String
Dim cc1 As Integer
Dim cc2 As Integer
Dim cc_len As Integer
Dim ch_out As String

cc_len = Len(ch_in)

While cc < cc_len
cc = cc + 1

Select Case Mid(ch_in, cc, 1)
' caractères accentués
Case "@", "À" To "Ä", "à" To "å"
ch_out = ch_out & "a"
Case "Æ", "æ" ' éclate le caractère
ch_out = ch_out & "ae"
Case "Ç", "ç"
ch_out = ch_out & "c"
Case "È" To "Ë", "è" To "ë"
ch_out = ch_out & "e"
Case "Ì" To "Ï", "ì" To "ï"
ch_out = ch_out & "i"
Case "Ð"
ch_out = ch_out & "d"
Case "Ñ", "ñ"
ch_out = ch_out & "n"
Case "Ò" To "Ö", "ò" To "ö"
ch_out = ch_out & "0"
Case "O", "o" ' éclate le caractère
ch_out = ch_out & "0e"

Case "Ù" To "Ü", "ù" To "ü"
ch_out = ch_out & "u"
Case "Ý", "ý", "ÿ"
ch_out = ch_out & "y"

Case "A" To "Z" ' les majuscules en minuscule
ch_out = ch_out & Chr(Asc(Mid(ch_in, cc, 1)) + 32)
Case "0" To "9", "a" To "z" ' conserve les caractères de base
ch_out = ch_out & Mid(ch_in, cc, 1)
Case Else ' ICI tous les autres caractères seront ignérés, même les espaces
' ne fait rien
End Select

Wend

cnv_pauvre = ch_out

End Function


À la prochaine
Afficher les 11 commentaires