Accueil > > > CLASSER DES CHAINES PAR ORDRE ALPHABÉTIQUE.
CLASSER DES CHAINES PAR ORDRE ALPHABÉTIQUE.
Information sur la source
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
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.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
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éjà de cela, parce que je n'ai rien trouvé 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éros dans une chaîne de chiffres, seulement, dès qu'on rencontre 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 été entré pour n'a
Requète http get dans une macro outlook [ par ipeteivince ]
Bonjour à tousVoila, je suis en train d'essayer de developepr une macro qui, après le parcours de tous les élements du clendrier outloo
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|