03. marts 2003 - 20:16Der er
6 kommentarer og 1 løsning
sortering af tal (ip-adresser9
Hej eksperter Har en access-base knyttet til mit VB6.0-prg. Her har jeg et felt til ip-adresser (tal), som jeg gerne vil have sorteret. Eks. på poster: 10.100.0.1 10.100.0.2 10.100.0.200 10.100.0.3 Så sorterer den .200 før .3 Kan man gøre noget ved dette ?
Når der står 10.100.0.200 er det en tekst, så når du sorterer kikker den på værdien på hvert tegns plads, og når den når til tegn 10 er 2 jo mindre end 3.
Derfor kan den ikke sortere bedre ellers skal du lave dem om således, men der er jo ikke korrekt.
1) læs alle IP-adresserne ud af DB ind i et array 2) loop igennem array og indsæt foranstående 0'er 3) Sortér 4) trim foranstående 0'er væk igen 5) genindlæs IP-adresserne til DB i korrekt rækkefølge
En nemmere metode er: Når posterne indlæses i DB'en, så indsæt de foranstående 0'er først, og lad tabellen indeholde adresserne MED foranstående nuller. Så vil tabellen altid kunne sorteres korrekt.
Så behøver du blot en rutine, der kan fjerne de foranstående 0'er når du trækker IP-adresser ud af DB.
Hvis du ønsker hjælp til kode der kan indsætte/fjerne 0'er, så lad mig det vide.
Er du sikker på at feltet i tabellen der indeholder IP-adresserne er et tal? Hvordan kan du have flere . i et tal? Tror du ikke at de er lagret som strenge?
Her er de rutiner jeg talte om: (Det er forudsat at du har posterne i et strengarray IParray):
Dim strNum() As String, strTemp As String, i As Long, j As Long 'laver alle tal 3-cifrede med foranstående nuller: For i = 0 To UBound(IParray) strTemp = "" strNum = Split(IParray(i), ".") For j = 0 To UBound(strNum) strTemp = strTemp & Format(CLng(strNum(j)), "000") & "." Next j strTemp = Left(strTemp, Len(strTemp) - 1) IParray(i) = strTemp Next i 'fjerner alle foranstående nuller (lader mindst ét ciffer stå): For i = 0 To UBound(IParray) strNum = Split(IParray(i), ".") strTemp = "" For j = 0 To UBound(strNum) strTemp = strTemp & Format(CLng(strNum(j)), "##0") & "." Next j strTemp = Left(strTemp, Len(strTemp) - 1) IParray(i) = strTemp Next i
Umiddelbart ville jeg dele IP adresserne op i de 4 bestanddele og placere dem i hver sin kolonne og så sortere på dem i den rigtig rækkefølge. Samles så igen til præsentationsformål.
Men why bother. Er det ikke korrekt af .200 kommer før .3 ? Hele formålet med sorteringen må jo være at gøre det lettere for en bruger at finde en given IP-adresse og hvis jeg fx ledte efter 1.1.1.3 så ville jeg da ikke forvente at finde den i en rækkefølge fortolket til 1.1.1.003 ?? If it ain't broke, don't fix it.
tjacob Ok. Jeg er desværre stået af.. kan ikke få det til at virke :-( Men det er nok mig der læse bedre på lektien... Men du skal have points.. for tiden du har brug.. Takker..
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.