IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

Problème de conversion


Sujet :

ASP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Janvier 2004
    Messages
    633
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 633
    Par défaut Problème de conversion
    Bonjour,
    Je récupère d'une base une liste d'adresses IP qu'il me faut trier de façon croissante. Le problème est que dans la base elles sont sous forme de string.
    Mon idée était de les mettre dans un tableau, le trier en effectuant un test ur le dernier octet de l'adresse converti en entier.
    Ca parait simple ! et ben là a chaque fois que je tente une conversion il me sort type incompatible

    Voici la fonction de tri tirée de chez Dypso puis adaptée à mon cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub QuickSort(byref vbArray,LB,UB)
     
      Dim i 
      Dim j 
      Dim X
      Dim Y
     
      i = LB
      j = UB
      X = vbArray((LB + UB) / 2)
      PosX=InstrRev(X,".")     
      ValX=Right(X,Len(X)-PosX)
      ValXconv=CInt(ValX)
     
      Do While (i <= j)
        Posi=InstrRev(Tab_ip(i),".")
        Vali=Right(Tab_ip(i),Len(Tab_ip(i))-Posi)
     
        Valiconv=CInt(Vali)
        Do While (Valiconv < ValXconv And i < UB)
           i = i + 1
        Loop
        Posj=InstrRev(Tab_ip(j),".")
        Valj=Right(Tab_ip(j),Len(Tab_ip(j))-Posj)
        Valjconv=CInt(Valj)
     
        Do While (ValXconv < Valjconv And j > LB)
          j = j - 1
        Loop
     
        If (i <= j) Then
          Y = vbArray(i)
          vbArray(i) = vbArray(j)
          vbArray(j) = Y
          i = i + 1
          j = j - 1
        End If
      Loop
     
      If (LB < j) Then QuickSort vbArray, LB, j
      If (i < RB) Then QuickSort vbArray, i, RB
     
    End Sub
    J'ai du oublier quelque chose mais là j'en suis au point de m'arracher les cheveux.D'avance merci de votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    requete...

    sql = Select FROM tbl_ipadresse ORDER BY ASC (ou DESC)
    connect.Execute(sql)

    while not eof

    response.write(sql)

    wend

  3. #3
    Membre émérite
    Inscrit en
    Janvier 2004
    Messages
    633
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 633
    Par défaut
    Ben ça m'aurais bien aidé. Ce sont des string
    et lorsque le dernier octet de l'IPest inférieur à 100 il apparait sur 2 positions
    donc le tri se fait 128.0.0.1, 128.0.0.100,128.0.0.101,...,128.0.0.2, 128.0.0.200,...
    D'ailleurs je l'ai déjà, j'avais oublié

  4. #4
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    L'idée du tableau me semble pas mal. Voici comment je vois la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    arr_IP = SPLIT(adresseIP,".")
    FOR i=0 to 3
         While Len(ArrIP(i)) < 4
              ArrIP(i)) = "0" & ArrIP(i)) 
         End While
    NEXT
    Tu devrais récupérer des
    128 | 000 | 000 | 001
    128 | 000 | 000 | 011
    128 | 000 | 000 | 101

    A partir de la si tu recompose les segments, tu peux facilement classer par ordre croissant.
    Non?
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre émérite
    Inscrit en
    Janvier 2004
    Messages
    633
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 633
    Par défaut
    Ben c'est curieux mais il me les resort comme si je n'avais pas fait la modification. Je vais fouiller le problème mais si tu as une autre idée, je suis preneur. Grrr je vais finir par detester les tris.

  6. #6
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Qqs erreur corrigées ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    arr_address = "128.0.0.1, 128.0.0.100, 128.0.0.101, 128.0.0.2, 128.0.0.200"
    arr_address = split(arr_address,", ")
    for j = 0 to ubound(arr_address)
    	arr_IP = SPLIT(arr_address(j),".") 
    	FOR i = 0 to 3
    		 Do While Len(arr_IP(i)) < 3 
    			  arr_IP(i) = "0" & arr_IP(i)
    		 loop
    		response.Write(arr_IP(i))
    	NEXT
    	response.Write("<br>")
    NEXT
    Me donne :
    128000000001
    128000000100
    128000000101
    128000000002
    128000000200

    Si tu remets cela dans une dimension de "arr_address" tu pourras classer plus facilement.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #7
    Membre émérite
    Inscrit en
    Janvier 2004
    Messages
    633
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 633
    Par défaut
    Bon merci pour l'aide mais cela ne fonctionnait pas j'ai donc décidé de modifier les valeurs dans la base. ça m'oblige a modifier quelques pages du site mais je pense qu'au final j'y gagne en performance car c'est le sgbd qui me fait le tri.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo