begin process at 2012 02 13 22:37:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

 > CLASSER DES CHAINES PAR ORDRE ALPHABÉTIQUE.

CLASSER DES CHAINES PAR ORDRE ALPHABÉTIQUE.


 Information sur la source

Note :
8,5 / 10 - par 10 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Texte Classé sous :trier, string, chaîne, alphabetique Niveau :Initié Date de création :30/01/2001 Vu / téléchargé :12 611 / 442

Auteur : Spectre2001

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Le code est très simple mais j'ai tenté de l'expliquer le plus possible en l'annotant de commentaires. On doit simplement créer un fichier d'où l'on extrait les chaines et une zone de liste nommée List1 pour l'affichage des chaines triées. Ensuite vous insérer le code dans le Form_load ou ailleurs, libre à vous.
Vous pouvez modifier la grandeur du tableau data (il peut dans mon code contenir 65556 chaines) pour libérer de la mémoire ou pour encore agrandir la capacité (pourquoi pas ?). Vous pouvez aussi prendre les chaines ailleurs que dans un fichier et les sortir autrepart que dans la liste.

Source

  • ' **********************************
  • ' * Listing par Spectre 2001 *
  • ' * Classer des chaines *
  • ' * par ordre alphabétique *
  • ' * en suivant le code ASCII *
  • ' *(donc majuscule avant minuscule)*
  • ' * Pour toutes remarques, *
  • ' * suggestions ou modifications: *
  • ' * spectre2001@ifrance.com *
  • ' * Visitez www.wiziwig.fr.st !! *
  • ' * ------------------------------ *
  • ' * Outils : - fichier "c:\test" *
  • ' * - Zone de liste List1*
  • ' **********************************
  • 'variable comptant le nombre de chaines à classer
  • Dim i As Integer
  • 'déclare un tableau de valeurs qui va contenir les chaines de caractère non classées
  • 'puis classées, sa contenance sera d'au maximun 65556 chaines (valeur à modifier)
  • Dim data(65556)
  • 'variable qui va s'incrémenter au fur et à mesure des caractères en commun
  • Dim comcarac As Integer
  • 'caractère déterminant la position de la chaine g (en commençant donc par le 1er)
  • Dim carac As String
  • 'caractère déterminant des chaines gbis à comparer
  • Dim caractest As String
  • 'code ascii caractère chaine g
  • Dim code As Integer
  • 'code ascii caractère chaine gbis
  • Dim codetest As Integer
  • 'chaines provisoires pour la permutation
  • Dim datasauv As String
  • 'initialise concarac à 1 (valeur normale)
  • comcarac = 1
  • 'ouvre le fichier contenant les chaines à classer
  • Open "c:\test.txt" For Input As #1
  • 'pour pas que le nombre de chaines s'ajoute à chaque fois
  • i = 0
  • 'boucle extrayant les chaines du fichier...
  • Do
  • 'incrémente i
  • i = i + 1
  • 'extrait ligne par ligne
  • Line Input #1, data(i)
  • '...jusqu'à ce que le fichier soit vide
  • Loop Until (EOF(1))
  • 'Boucle classant les chaines (tri à bulle) s'exécutant autant de fois qu'il y a de chaines
  • 'traite chaine par chaine
  • For g = 1 To i
  • 'boucle insérée, chaque chaine sera comparée à toutes les autres
  • For gbis = 1 To i - 1
  • 'extrait le caractère de la chaine à classer, étiquette pour recommencer
  • 'les conditions
  • recommence: carac = Mid$(data(g), comcarac, 1)
  • 'si le caractère n'est pas rien
  • If carac <> "" Then
  • 'le code du caractère
  • code = Asc(carac)
  • Else
  • 'sinon on dit un nombre impossible (car arret de la table à 256)
  • 'de façon à le mettre à la fin
  • code = 257
  • End If
  • 'on ne compare pas la chaine à elle-même
  • If gbis <> g Then
  • 'extrait le caractère de la chaine à comparer
  • caractest = Mid$(data(gbis), comcarac, 1)
  • 'même principe qu'en haut
  • 'si le caractère n'est pas rien
  • If caractest <> "" Then
  • 'le code du caractère
  • codetest = Asc(caractest)
  • Else
  • 'sinon on dit un nombre impossible (car arret de la table à 256)
  • 'de façon à le mettre à la fin
  • codetest = 257
  • End If
  • 'si le code ascii de la chaine à classer est inférieur...
  • If code < codetest Then
  • '...alors on permute l'ordre des chaines
  • datasauv = data(gbis)
  • data(gbis) = data(g)
  • data(g) = datasauv
  • 'si les deux caractères des chaines sont identiques alors...
  • ElseIf code = codetest Then
  • '...si on n'est pas arrivé au bout de la chaine à classer alors...
  • If comcarac < Len(data(g)) Then
  • '...si on est arrivé au bout de la chaine à comparer avec
  • 'tous les caractères des 2 chaines identiques...
  • If comcarac = Len(data(gbis)) Then
  • '...alors on s'en va sans toucher à l'ordre des chaines
  • GoTo saute
  • '...sinon...
  • Else
  • '...on recompare le caractère suivant des deux chaines
  • 'on incrémente comcarac
  • comcarac = comcarac + 1
  • 'et c'est reparti
  • GoTo recommence
  • End If
  • '... mais si on est arrivé au bout de la chaine à classer sans
  • 'trouver de caractère différent...
  • ElseIf comcarac = Len(data(g)) Then
  • '...si la chaine à classer et moins grande que celle à comparer...
  • If Len(data(g)) < Len(data(gbis)) Then
  • 'on permute
  • datasauv = data(gbis)
  • data(gbis) = data(g)
  • data(g) = datasauv
  • End If
  • End If
  • End If
  • 'étiquette pour sortir des conditions
  • saute: End If
  • 'et hop on remet comcarac à 1 (valeur normale)
  • comcarac = 1
  • 'et on tourne
  • Next gbis
  • 'et encore
  • Next g
  • 'puis enfin on affiche les résultats dans une zone de liste grâce à une boucle
  • For r = 1 To i
  • 'on ajoute la chaine en cours dans le bon ordre
  • List1.AddItem data(r)
  • 'on tourne
  • Next r
  • 'et puis tout est ok on ferme le fichier (on pourrait le faire plus tôt)
  • Close #1
'                          **********************************
'                          *    Listing par Spectre 2001    *
'                          *       Classer des chaines      *
'                          *      par ordre alphabétique    *
'                          *     en suivant le code ASCII   *
'                          *(donc majuscule avant minuscule)*
'                          *     Pour toutes remarques,     *
'                          *  suggestions ou modifications: *
'                          *     spectre2001@ifrance.com    *
'                          *  Visitez www.wiziwig.fr.st !!  *
'                          * ------------------------------ *
'                          *  Outils : - fichier "c:\test"  *
'                          *           - Zone de liste List1*
'                          **********************************


'variable comptant le nombre de chaines à classer
Dim i As Integer
'déclare un tableau de valeurs qui va contenir les chaines de caractère non classées
'puis classées, sa contenance sera d'au maximun 65556 chaines (valeur à modifier)
Dim data(65556)
'variable qui va s'incrémenter au fur et à mesure des caractères en commun
Dim comcarac As Integer
'caractère déterminant la position de la chaine g (en commençant donc par le 1er)
Dim carac As String
'caractère déterminant des chaines gbis à comparer
Dim caractest As String
'code ascii caractère chaine g
Dim code As Integer
'code ascii caractère chaine gbis
Dim codetest As Integer
'chaines provisoires pour la permutation
Dim datasauv As String

'initialise concarac à 1 (valeur normale)
comcarac = 1
'ouvre le fichier contenant les chaines à classer
Open "c:\test.txt" For Input As #1
'pour pas que le nombre de chaines s'ajoute à chaque fois
i = 0
'boucle extrayant les chaines du fichier...
Do
'incrémente i
i = i + 1
'extrait ligne par ligne
Line Input #1, data(i)
'...jusqu'à ce que le fichier soit vide
Loop Until (EOF(1))

'Boucle classant les chaines (tri à bulle) s'exécutant autant de fois qu'il y a de chaines
'traite chaine par chaine
For g = 1 To i
    'boucle insérée, chaque chaine sera comparée à toutes les autres
    For gbis = 1 To i - 1
        'extrait le caractère de la chaine à classer, étiquette pour recommencer
        'les conditions
recommence: carac = Mid$(data(g), comcarac, 1)
        'si le caractère n'est pas rien
        If carac <> "" Then
                'le code du caractère
                code = Asc(carac)
            Else
                'sinon on dit un nombre impossible (car arret de la table à 256)
                'de façon à le mettre à la fin
                code = 257
        End If
        'on ne compare pas la chaine à elle-même
        If gbis <> g Then
            'extrait le caractère de la chaine à comparer
            caractest = Mid$(data(gbis), comcarac, 1)
             'même principe qu'en haut
            'si le caractère n'est pas rien
            If caractest <> "" Then
                'le code du caractère
                codetest = Asc(caractest)
            Else
                'sinon on dit un nombre impossible (car arret de la table à 256)
                'de façon à le mettre à la fin
                codetest = 257
            End If
            'si le code ascii de la chaine à classer est inférieur...
            If code < codetest Then
                '...alors on permute l'ordre des chaines
                datasauv = data(gbis)
                data(gbis) = data(g)
                data(g) = datasauv
            'si les deux caractères des chaines sont identiques alors...
            ElseIf code = codetest Then
                '...si on n'est pas arrivé au bout de la chaine à classer alors...
                If comcarac < Len(data(g)) Then
                    '...si on est arrivé au bout de la chaine à comparer avec
                    'tous les caractères des 2 chaines identiques...
                    If comcarac = Len(data(gbis)) Then
                        '...alors on s'en va sans toucher à l'ordre des chaines
                        GoTo saute
                    '...sinon...
                    Else
                    '...on recompare le caractère suivant des deux chaines
                    'on incrémente comcarac
                    comcarac = comcarac + 1
                    'et c'est reparti
                    GoTo recommence
                    End If
                '... mais si on est arrivé au bout de la chaine à classer sans
                'trouver de caractère différent...
                ElseIf comcarac = Len(data(g)) Then
                    '...si la chaine à classer et moins grande que celle à comparer...
                        If Len(data(g)) < Len(data(gbis)) Then
                        'on permute
                        datasauv = data(gbis)
                        data(gbis) = data(g)
                        data(g) = datasauv
                        End If
                End If
            End If
'étiquette pour sortir des conditions
saute:  End If
        'et hop on remet comcarac à 1 (valeur normale)
        comcarac = 1
    'et on tourne
    Next gbis
'et encore
Next g

'puis enfin on affiche les résultats dans une zone de liste grâce à une boucle
For r = 1 To i
    'on ajoute la chaine en cours dans le bon ordre
    List1.AddItem data(r)
'on tourne
Next r
'et puis tout est ok on ferme le fichier (on pourrait le faire plus tôt)
Close #1 

 Conclusion

La routine trie donc des chaines de caractère par ordre alphabétique. Les chaines peuvent être de n'importe quelle taille et peuvent contenir tous les caractères ASCII. Elles sont triées par code ASCII, les majuscules apparaitront donc avant toutes les minuscules. La méthode utilisée est la méthode classique du tri à bulles, améliorée pour trier les chaines sur plusieurs caractères. Bref, ça marche très bien et c'est très efficace.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip ALLUMEZ ET ÉTEINDRE LES LEDS DU CLAVIER (MAJ,NUM,SCROLL) !!!...

 Sources de la même categorie

Source avec Zip Source avec une capture MASQUE DE SAISIE NUMÉRIQUE par acive
Source avec Zip Source .NET (Dotnet) COMPTEUR DE NOMBRE DE MOTS DANS UN TEXTE par alpha5
Source avec Zip Source avec une capture HM - BLOCNOTE par hassenmajor
Source .NET (Dotnet) [VB.NET] CLASS DE COLORATION SYNTAXIQUE "ON THE FLY" par huzima
Source avec Zip Source avec une capture PERSONNALISEZ VOS BOÎTES DE MESSAGE (X)HTML par medjahedScript

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES LISTES : RANGEMENT (LIST.SORT) ET FILTRAGE (LIST... par kbalist
Source .NET (Dotnet) UTILISATION DE SORTEDLIST POUR TRIER UNE COLLECTION DE VALEU... par blq
Source avec Zip CALCUL D'APRES UN TEXTBOX par lololilizozo
CHAÎNE ALÉATOIRE / RANDOM STRING par mizoz
Source avec Zip FONCTION DE SUBSTITUTION DE CHAÎNES par Renaud

Commentaires et avis

Commentaire de jefekoi le 01/05/2003 17:02:29

Bravo à toi j'en avais besoin , merci ;)

Commentaire de liquide le 25/01/2004 15:57:29

Bonjour,

C'est peut etre une grosse betise ce que je vais dire, mais j'aimerais bien une explication sur la methode de tri sur les "string" ,car , si j'ai pu comprendre le tri a bulle dans ce cas la, il s'agit de trier les "string" par ordre alphabetique en recherchant les caracteres Ascii 1 par 1. sur cela je me suis poser la question si je pouvais comparer directement tout le string par rapport a un autre et j'ai proceder de la sorte: Avec 3 Textbox et 1 command button

Private Sub Command9_Click()
If Text5.Text &gt; Text6.Text Then Text7.Text = "True"
If Text5.Text &lt; Text6.Text Then Text7.Text = "false"
If Text5.Text = Text6.Text Then Text7.Text = "egal"
End Sub
Il est clair que ca ne trie pas, en revanche et , bien entendu si mon raisonnement est bon, j'en ressort qu'il me donne le bon resultat sur tout le string, je n'ai pas necessairement besoin de comparer les Ascii

Alors voila, comme le tri a bulle est repandu, c'est qu'il doit etre la pour qqe chose !!!!!! j'en conclu dans cet exemple que c'est le "mode de tri" mais dans cet exemple meme, pk comparer Chaque Ascii alors que dans mon raisonnement , il n'est pas necessaire de le faire. Expliquez moi ou je foire dans mon raisonnement sur ce cas la SVP

liquide

Commentaire de ThunderPsycho le 31/08/2004 23:42:17

Joli, efficace, et rapide... -> 9/10

J'ai trié un fichier texte comportant 800 entrées en qques secondes, celui-là marche bien mieux que le miens ;o)
J'avais aussi utilisé les codes ascii pour différencier les caractères, mais bon, je l'ai pas assez bien optimisé :o/

Sinon j'ai ajouté un textbox à la place de la liste afin que le contenu soir éditable et une fonction à la fin pour que les valeurs sorties soient uniques, cela n'apporte rien au prog mais c ce dont j'avais besoin donc je le met au cas ou, donc ds la boucle qui doit remplir la list :


For r = 1 To i

   'La condition pour vérifier les valeurs doubles
   If tempdata <> data(r) Then
      result = result & data(r) & vbCrLf
      tempdata = data(r)
   End If

Next r

'Et l'affichage ds le textbox
TextBox1.Text = result

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Tri d'un tableau de string [ par pledoux ] Bonjour,J'ai un tableau de string que je dois trier. Actuellement je le mets dans une liste, qui est visible=false et sorted=true, pour le récupérer t Trier des cellules Excel par ordre alphabetique [ par nagstef ] Bonjour !!Existe-t'il un code ou un sujet qui parle d&#233;j&#224; de cela, parce que je n'ai rien trouv&#233; en faisant les recherches, si ce n'est Taille d'une chaîne de caractères [ par basamir ] Bonjour,ya t il un e méthode pour allouer à une variable type String une taille fix, par exemple:Dim chaine as string "avec une longueur total de 5)Me VB.Net Trier un tableau de String [ par MagDix ] Bonjour à tous... Comment est-il possible de trier dans un Tableau.. ??? Si quelqu'un peut me montrer un exemple à partir de la colonne 0 merci Largeur cm string vba word [ par sisi231 ] Bonjour !Dans une macro Word je voudrait redimensionner les largeurs des colonnes d'un tableau créé par ma macrode la largeur de leur titre c'est-à-di MSComm1 String [ par Mickzan57 ] Bonjour à tous,je souhaiterais envoyer un nombre sous forme de chaîne de caractère. j ai essayé plusieurs instructions mais je n'arrive qu' à envoyer le " dans une string [ par audklie ] hello!En fait je voudrais reperer la position du caractère " dans une chaine.  (VBScript)j'ai essayé plusieurs trucs ( "\""  par exemple) mais a chaqu Chaîne [ par guigui28 ] Bonjour, Je cherche une fonction pour supprimer les z&#233;ros dans une cha&#238;ne de&nbsp;chiffres, seulement, d&#232;s qu'on rencontre&nbsp;un chif Filtrer le contenu d'une chaîne [ par RPG3000 ] Salut tout le monde, j'ai une textbox (txtPseudonyme) et j'aimerais que le programme puisse filtrer le texte qui y a &#233;t&#233; entr&#233; pour n'a Requète http get dans une macro outlook [ par ipeteivince ] Bonjour &#224; tousVoila, je suis en train d'essayer de developepr une macro qui, apr&#232;s le parcours de tous les &#233;lements du clendrier outloo


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales