[R] Tri de tableau contenant des nombres

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[R] Tri de tableau contenant des nombres

#1

Message par jpascal »

Bonjour,

Je récupère des numéros de version de la forme (xx.x.xx) d'une page internet que je stocke dans un tableau.
Lorsque j'effectue un tri, les valeurs 11, 12, ... sont stockées après le 1 et avant le 2.

L'utilisation de la fonction Number ne résoud pas le problème.

Code : Tout sélectionner

        Local $sPattern = '(?i)<td><a href=".*?/">(\d+)\.(\d\.?\d*)/</a></td>'
        Local $oIE = _IECreate($sUrl, 0, 0); Fenêtre invisible
        Local $sHTML = _IEBodyReadHTML($oIE)
        Local $aArray = StringRegExp($sHTML, $sPattern, 3)
        If @error = 0 Then
            Local $aVersions[0][3]
            ; Tri des versions en créant deux tableaux
            Local $iVersion = 0
;~          Local $aSubVersions[0]
            For $i = 0 To UBound($aArray) - 1 Step 2
                _ArrayAdd($aVersions, Number($aArray[$i]))
;~               $aSubVersions = StringSplit($aArray[$i + 1], ".", $STR_NOCOUNT)
;~              If @error = 1 Then
;~                  $aVersions[$iVersion][1] = Number($aArray[$i + 1])
;~              Else
;~                  $aVersions[$iVersion][1] = Number($aSubVersions[0])
;~                  $aVersions[$iVersion][2] = Number($aSubVersions[1])
;~              EndIf
                $iVersion += 1
            Next
            _ArrayColDelete($aVersions, 2)
            _ArrayColDelete($aVersions, 1)
            _ArrayDisplay($aVersions)
            _ArraySort($aVersions)
            _ArrayDisplay($aVersions)
        EndIf
Ce qui est étonnant c'est que ce code, lui, fonctionne correctement :

Code : Tout sélectionner

Local $aArray[0]
_ArrayAdd($aArray,Number("7"))
_ArrayAdd($aArray,Number("33"))
_ArrayAdd($aArray,Number("10"))
_ArrayAdd($aArray,Number("2"))
_ArrayDisplay($aArray)
_ArraySort($aArray)
_ArrayDisplay($aArray)
Modifié en dernier par jpascal le lun. 04 janv. 2016 10:17, modifié 1 fois.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Tri de tableau contenant des nombres

#2

Message par jguinch »

C'est parce que les nombres sont traités comme des chaînes de caractère, donc alphabétiquement, le 12 est avant le 2...
Tu peux t'en sortir comme ça, (par exemple) :
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Tri de tableau contenant des nombres

#3

Message par jpascal »

Bonjour jguinch,

Je ne comprends toujours pas pourquoi la fonction number fonctionne dans le second script et pas le premier.

Ce qui est sûr c'est que ta méthode nécessite peu de code et fonctionne à merveille.

Un grand merci et mes meilleurs voeux pour cette nouvelle année 2016.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre