Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HTA] Classement alphabétique des éléments d'un tableau (vbs)

7 réponses
Avatar
sympatix
Bonjour !

J'ai dans une page HTA, un tableau (en vbscript) à une dimension, qui est
remplit par la lecture d'un fichier texte, et dont le nombre d'éléments peut
varier (entre 1 et 1500 environ).
Ces éléments contiennent chacun une chaine (string), de 80 à 300 caractères
environ, espaces compris)
Mon but est de "ranger" dans une variable normale (scalaire) le contenu des
éléments du tableau, mais par ordre alphabétique.

Comment faire ?
Faut-il jongler avec la manipulation des strings (avec les différentes
fonctions comment Instr, Mid, Left, ...et leurs cousines), ou existe-t-il
une fonction "Ad-Hoc" pour classer alphabétiquement les éléments d'un
tableau ? Ou faut-il que je me mette aux expressions régulières ?

Je met ci-dessous un extrait (non fonctionnel) du script, qui pour l'instant
se contente
d'afficher dans la page, le contenu du tableau, mais dans le même ordre que
la lecture du fichier texte, donc, non classé alphabétiquement.

-------Extrait -------------------------
Dim Lit ()
Do
Redim Preserve Lit (n)
Lit (n) = Texte.ReadLine
n = n+1
Loop Until Texte.AtEndOfStream

For each M in Lit
R = R & VbCrlf & M
Affiche.innertext = R
Next
------------Extrait Fin -----------------

D'avance, merci pour vos réponses :-)

--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

7 réponses

Avatar
Fred
Dans son message %
sympatix nous dit :

Bonjour !


Bonjour,

J'ai dans une page HTA, un tableau (en vbscript) à une dimension, qui
est remplit par la lecture d'un fichier texte, et dont le nombre
d'éléments peut varier (entre 1 et 1500 environ).
Ces éléments contiennent chacun une chaine (string), de 80 à 300
caractères environ, espaces compris)
Mon but est de "ranger" dans une variable normale (scalaire) le
contenu des éléments du tableau, mais par ordre alphabétique.

Comment faire ?


Programmer un algorithme de tri ! Fais une recherche Google avec
QuickSort par exemple.
Tu peux aussi profiter des commandes existantes TYPE fichier | SORT >
fichierTrié par exemple.
C'est un peu moins "propre" mais cela fonctionne.


Faut-il jongler avec la manipulation des strings (avec les différentes
fonctions comment Instr, Mid, Left, ...et leurs cousines), ou
existe-t-il une fonction "Ad-Hoc" pour classer alphabétiquement les
éléments d'un tableau ?


Je ne crois pas hélas,

Ou faut-il que je me mette aux expressions
régulières ?


Si tu veux mais je ne pense pas que cela puisse t'aider ici :-)
C'est, par ailleurs, très intéressant

[...]

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
sympatix
Programmer un algorithme de tri ! Fais une recherche Google avec QuickSort
par exemple.


j'ai vu...donc, en gros, le principe, c'est de choisir arbitrairement un
élément, et de placer ensuite à gauche ou à droite tout le reste en le
triant !
:-)))

Tu peux aussi profiter des commandes existantes TYPE fichier | SORT >
fichierTrié par exemple.
C'est un peu moins "propre" mais cela fonctionne.
En fouillant dans la doc (script56.chm), j'ai vu des infos (c'est en

jscript, mais ça m'a l'air déjà plus accessible)

Ou faut-il que je me mette aux expressions
régulières ?
Si tu veux mais je ne pense pas que cela puisse t'aider ici :-)

C'est, par ailleurs, très intéressant
Je n'en doute pas ...le plus dur c'est de s'y mettre (mais bon, si ça ne

sert à rien ici, j'attendrai une autre occasion pour m'y plonger !)

Merci :-)


--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"Fred" a écrit dans le message de news:
%
Dans son message %
sympatix nous dit :

Bonjour !


Bonjour,

J'ai dans une page HTA, un tableau (en vbscript) à une dimension, qui
est remplit par la lecture d'un fichier texte, et dont le nombre
d'éléments peut varier (entre 1 et 1500 environ).
Ces éléments contiennent chacun une chaine (string), de 80 à 300
caractères environ, espaces compris)
Mon but est de "ranger" dans une variable normale (scalaire) le
contenu des éléments du tableau, mais par ordre alphabétique.

Comment faire ?


Programmer un algorithme de tri ! Fais une recherche Google avec QuickSort
par exemple.
Tu peux aussi profiter des commandes existantes TYPE fichier | SORT >
fichierTrié par exemple.
C'est un peu moins "propre" mais cela fonctionne.


Faut-il jongler avec la manipulation des strings (avec les différentes
fonctions comment Instr, Mid, Left, ...et leurs cousines), ou
existe-t-il une fonction "Ad-Hoc" pour classer alphabétiquement les
éléments d'un tableau ?


Je ne crois pas hélas,

Ou faut-il que je me mette aux expressions
régulières ?


Si tu veux mais je ne pense pas que cela puisse t'aider ici :-)
C'est, par ailleurs, très intéressant

[...]

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT




Avatar
Do Re Mi chel La Si Do
Bonsoir !


Plutôt que du Quicksort, je conseille d'utiliser un Shell-Metzner, qui, dans
certains cas, sera très légèrement plus lent, mais, en contrepartie,
beaucoup plus facile à implémenter (le code doit être 4 ou 5 fois plus
court).

Si les performances sont critiques, autant utiliser un tri par distribution.
Ceci dit, pour une taille aussi petite que 1500 lignes, n'importe quelle
méthode de tri sera suffisamment rapide. Même un tri à bulles se mesurera en
centièmes de secondes.


@-salutations

Michel Claveau
Avatar
sympatix
Bonsoir !

Plutôt que du Quicksort, je conseille d'utiliser un Shell-Metzner, qui,
dans certains cas, sera très légèrement plus lent, mais, en contrepartie,
beaucoup plus facile à implémenter (le code doit être 4 ou 5 fois plus
court).

Si les performances sont critiques, autant utiliser un tri par
distribution. Ceci dit, pour une taille aussi petite que 1500 lignes,
n'importe quelle méthode de tri sera suffisamment rapide. Même un tri à
bulles se mesurera en centièmes de secondes.


Merci pour ces infos complémentaires. Pour un non initié comme moi, la
méthode du Quicksort me parait effectivement assez complexe, d'un premier
abord.
Je vais donc faire au plus simple avec les autres (bulles, distribution,
Shell metzner).

merci:-)
--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
"Do Re Mi chel La Si Do" a écrit dans le
message de news:
Bonsoir !


Plutôt que du Quicksort, je conseille d'utiliser un Shell-Metzner, qui,
dans certains cas, sera très légèrement plus lent, mais, en contrepartie,
beaucoup plus facile à implémenter (le code doit être 4 ou 5 fois plus
court).

Si les performances sont critiques, autant utiliser un tri par
distribution. Ceci dit, pour une taille aussi petite que 1500 lignes,
n'importe quelle méthode de tri sera suffisamment rapide. Même un tri à
bulles se mesurera en centièmes de secondes.


@-salutations

Michel Claveau





Avatar
Fred
Dans son message
Do Re Mi chel La Si Do nous dit :

Bonsoir !


Plutôt que du Quicksort, je conseille d'utiliser un Shell-Metzner,
qui, dans certains cas, sera très légèrement plus lent, mais, en
contrepartie, beaucoup plus facile à implémenter (le code doit être 4
ou 5 fois plus court).

Si les performances sont critiques, autant utiliser un tri par
distribution. Ceci dit, pour une taille aussi petite que 1500 lignes,
n'importe quelle méthode de tri sera suffisamment rapide. Même un tri
à bulles se mesurera en centièmes de secondes.



Shell-Metzner ? Si j'ai connu, je ne m'en souviens plus.
Par contre, les bulles, j'aime bien. Et celui-là il est simple.
En fait dans le cas du chargement d'un fichier, il n'a pas la contrainte
de faire le tri "sur-place".
Il doit être possible de faire un tri par insertion aussi rapide.
Je me souviens aussi avoir fait un algo avec un arbre binaire,
exactement dans cette configuration.
L'amusant étant de le remettre à plat ensuite (sans fonction récursive
bien sûr) :-)
Je tape Shell-Metzner de ce pas sur Google avantde me coucher moins
ignorant.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
jbongran
sympatix wrote:
Bonjour !

J'ai dans une page HTA, un tableau (en vbscript) à une dimension, qui
est remplit par la lecture d'un fichier texte, et dont le nombre
d'éléments peut varier (entre 1 et 1500 environ).
Ces éléments contiennent chacun une chaine (string), de 80 à 300
caractères environ, espaces compris)
Mon but est de "ranger" dans une variable normale (scalaire) le
contenu des éléments du tableau, mais par ordre alphabétique.

Comment faire ?
Faut-il jongler avec la manipulation des strings (avec les différentes
fonctions comment Instr, Mid, Left, ...et leurs cousines), ou
existe-t-il une fonction "Ad-Hoc" pour classer alphabétiquement les
éléments d'un tableau ? Ou faut-il que je me mette aux expressions
régulières ?
Je met ci-dessous un extrait (non fonctionnel) du script, qui pour
l'instant se contente
d'afficher dans la page, le contenu du tableau, mais dans le même
ordre que la lecture du fichier texte, donc, non classé
alphabétiquement.
-------Extrait -------------------------
Dim Lit ()
Do
Redim Preserve Lit (n)
Lit (n) = Texte.ReadLine
n = n+1
Loop Until Texte.AtEndOfStream

For each M in Lit
R = R & VbCrlf & M
Affiche.innertext = R
Next
------------Extrait Fin -----------------

D'avance, merci pour vos réponses :-)


En faisant appel à un recordset deconnecté (disconnected recordset) ?
Const adVarChar = 200
Set RS = server.CreateObject("ADODB.Recordset")
RS.fields.append "sLine", adVarChar, 500
RS.CursorLocation = adUseClient
RS.CursorType = adOpenStatic
RS.open
Do
Rs.addnew "sLine", Trim(Texte.ReadLine)
Loop Until Texte.AtEndOfStream
RS.Update
' RS.Resync <- ne sait plus si c'est utile
RS.Sort = "sLine ASC"
RS.MoveFirst
While RS.EoF = False
R = R & RS.Fields.Item("Sline").Value
RS.MoveNext
Wend
RS.Close
Set RS = Nothing

Non testé, juste pour donner l'idée...
L'usage de GetString est plus rapide que de boucler sur le recordset

Avatar
sympatix
En faisant appel à un recordset deconnecté (disconnected recordset) ?
Const adVarChar = 200
Set RS = server.CreateObject("ADODB.Recordset")
RS.fields.append "sLine", adVarChar, 500
RS.CursorLocation = adUseClient
RS.CursorType = adOpenStatic
RS.open
Do
Rs.addnew "sLine", Trim(Texte.ReadLine)
Loop Until Texte.AtEndOfStream
RS.Update
' RS.Resync <- ne sait plus si c'est utile
RS.Sort = "sLine ASC"
RS.MoveFirst
While RS.EoF = False
R = R & RS.Fields.Item("Sline").Value
RS.MoveNext
Wend
RS.Close
Set RS = Nothing

Non testé, juste pour donner l'idée...
L'usage de GetString est plus rapide que de boucler sur le recordset


Salut !

Merci pour ce code. Je n'ai pas encore pu le tester, mais je le garde
soigneusement :-)
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)