Page 1 sur 1

[R] Tri de tableau contenant des nombres

Posté : jeu. 31 déc. 2015 11:20
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)

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

Posté : jeu. 31 déc. 2015 12:12
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

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

Posté : lun. 04 janv. 2016 10:17
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.