Trier des ip (ou des noms de fichiers contenant des chiffres)


Description

Pour les besoins de l'un de mes programme il me fallait trier des IP.
Je me suis rapidement aperçu que si la méthode de tri marchait correctement il existait un bug assez génant.
En effet l'IP 80.203.4.152 était situé après l'IP 110.10.10.10 par exemple car elle commence par 8 et l'autre par 1.
Ce qui est parfaitement logique au niveau de la machine ne l'est pas au niveau de l'homme...
Donc je me suis dit il faut rajouter des 0 pour ramener l'ordre normal des choses.
Ce qui donne pour l'exemple 080.203.004.152
On applique ensuite la méthode de tri de son choix (je n'en ai mise aucune pour éviter de recopier bêtement une des nombreuse source à ce sujet sur le site)
Enfin on appelle la 2e fonction qui reformate l'IP en enlevant les 0 inutiles. Cette fonction peut paraître superflue car il suffirait de rappeler l'IP initiale mais comme ça si l'utilisateur à taper une IP avec des 0 inutiles l'IP est formatée correctement.

Ces 2 fonctions sont appliquables (en les modifiant légèrement bien entendu) à d'autres choses comme des noms de fichiers.
Par exemple trier des images dont les noms sont 1.jpg , 10.jpg, 100.jpg, ... en ne faisant qu'une passe au lieu de 4

Source / Exemple :


En cas de problème avec le zip voilà les 2 fonctions et un exemple (pour les newbies il suffit de créer un bouton sur une form) :

Private Sub Command1_Click()
Dim ipc As String
ipc = "80.203.4.152"
MsgBox PutZero(ipc)
' C'est entre les 2 fonctions que l'on peut appliquer le tri
MsgBox DelZero(PutZero(ipc))
End Sub

Public Function PutZero(ip As String)
' La méthode est la suivante :
' Si le nombre de caractères avant le point est de 1 alors il faut rajouter 2 zéros
' Si le nombre de caractères avant le point est de 2 alors il faut rajouter 1 zéros
prem = 1
carc = -1
nbc = 0
For i = 1 To 4
carc = carc + 4
First = InStr(prem, ip, ".", 1) ' On cherche le nombre de caractère avant le point
If First = 0 Then First = Len(ip) + 1
If First = carc + 1 Then ' Le nombre de caractères est de 3
    prem = First + 1
    Else
        If First = carc Then ' Le nombre de caractères est de 2
        ip = Left(ip, nbc) & "0" & Right(ip, Len(ip) - nbc)
        prem = First + 2
        Else
            If First = carc - 1 Then ' Le nombre de caractères est de 1
                ip = Left(ip, nbc) & "00" & Right(ip, Len(ip) - nbc)
                prem = First + 3
            End If
        End If
End If
nbc = nbc + 4
Next
PutZero = ip
End Function

Public Function DelZero(ip As String)
' Pourquoi faire compliquer quand on peut faire simple ?
' On convertit juste les string en long et il retire les 0 tout seul
Dim lng As Long
Dim ipnew As String
num = 1
For i = 1 To 4
lng = Mid(ip, num, 3) ' On récupère chaque partie de l'ip que l'on converti en long
If i = 4 Then pnt = "" Else pnt = "." ' Pour éviter d'avoir un . à la fin de l'ip
ipnew = ipnew & lng & pnt ' On reforme l'ip au fur et à mesure
num = num + 4
Next
DelZero = ipnew
End Function

Conclusion :


Voilà en espérant que cela pourra être utile à certain. Et désolé pour la pauvreté des commentaires je ne suis pas très fort pour les explications...
A et jtiens à dire ke c pas parce kon est programmeur kon est obligé de faire des fautes à tt les mots :D

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.