![]() |
IP-Adressen sortieren
Habe eine kleine Anwendung geschrieben, wo alle IP-Adressen unserer Fa. gesammelt werden.
Die IP-Adresse trage ich in ein String-Feld ein; allerdings habe ich bisher keine Möglichkeit gefunden, die IP-Adressen in sortierter Reihenfolge auszugeben. Vielleicht kennt jemand eine Funktion, der aus dieser Liste 10.250.150.1 10.250.150.10 10.250.150.11 10.250.150.2 ... diese macht 10.250.150.1 10.250.150.2 10.250.150.10 10.250.150.11 ... Vielen Dank und noch allen Frohe Weihnachten :-D |
Re: IP-Adressen sortieren
Da musst Du selbst Hand anlegen. Mir ist dafür keine Standard-Funktion bekannt. Ein nach dem Punkt [dp:dbe1a94717=split]splitten[/dp:dbe1a94717] und dann die einzelnen Integerwerte jeweils vergleichen.
...:cat:... |
Re: IP-Adressen sortieren
Zitat:
OK, Danke. :hi: |
Re: IP-Adressen sortieren
IP`s in sringliste laden und dann stringlist.sort
|
Re: IP-Adressen sortieren
Hallo arbu man,
dann kommt das raus, was man nicht haben will ... bye Claus |
Re: IP-Adressen sortieren
Dann Spliten und die Zahlen mit dieser funktion sortieren
Delphi-Quellcode:
procedure sort2 (var a: array of word);
var bis,i,j,k : longint; h : word; begin bis := high(a); k := bis shr 1; { div 2 } While k > 0 do begin For i := 0 To bis - k do begin j := i; While (j >= 0) And (a[j] > a[j + k]) do begin h := a[j]; a[j]:= a[j + k]; a[j + k] := h; dec(j,k); end; end; k := k shr 1; { div 2 } end; End; |
Re: IP-Adressen sortieren
@arbu man: Ich weiß absolut nicht, was Deine Funktion erreichen soll. Du solltest etwas mehr Code liefern, zumal ich glaube, dass Du am Problem vorbei denkst...
...:cat:... |
Re: IP-Adressen sortieren
Folgender Funktionsentwurf würde gehen. Dieser ist jetzt weder schön noch gut, aber sollte gehen und Dir einen Ansatz liefern ;) Voraussatzung ist, dass die Werte in einer TStringListe stehen.
Delphi-Quellcode:
...:cat:...
// diese Funktion wird an die CustomSort methode der StringList übergeben
// siehe weiter unten für das Beispiel... function IPSort(List: TStringList; Index1, Index2: Integer): Integer; var S1, S2: String; // indizies I11, I12, I21, I22, // bytewerte I1B, I2B: Byte; begin S1 := List[Index1]; S2 := List[Index2]; // erstes Byte vergleichen I11 := Pos('.', S1); I1B := StrToIntDef(Copy(S1, 1, Pred(I11)), -1); I21 := Pos('.', S2); I2B := StrToIntDef(Copy(S2, 1, Pred(I21)), -1); if I1B < I2B then begin Result := -4 end else if I1B > I2B then begin Result := 4 end else begin // zweites Byte vergleichen Inc(I11); I12 := PosEx('.', S1, I11); I1B := StrToIntDef(Copy(S1, I11, I12 - I11), -1); Inc(I21); I22 := PosEx('.', S1, I21); I2B := StrToIntDef(Copy(S2, I21, I22 - I21), -1); if I1B < I2B then begin Result := -3 end else if I1B > I2B then begin Result := 3 end else begin // drittes Byte vergleichen Inc(I12); I11 := PosEx('.', S1, I12); I1B := StrToIntDef(Copy(S1, I12, I11 - I12), -1); Inc(I22); I21 := PosEx('.', S1, I22); I2B := StrToIntDef(Copy(S2, I22, I21 - I22), -1); if I1B < I2B then begin Result := -2 end else if I1B > I2B then begin Result := 2 end else begin // viertes Byte vergleichen Inc(I11); I12 := PosEx('.', S1, I11); I1B := StrToIntDef(Copy(S1, I11, MaxInt), -1); Inc(I21); I22 := PosEx('.', S1, I21); I2B := StrToIntDef(Copy(S2, I21, MaxInt), -1); if I1B < I2B then begin Result := -1 end else if I1B > I2B then begin Result := 1 end else begin Result := 0; end; end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin SL := TStringList.Create; try /// WERTE IN DIE STRING-LISTE EINTRAGEN .... /// STRING-LISTE SORTIEREN SL.CustomSort(IPSort); /// und zum beispiel in ein Memo schreiben Memo1.Lines.Assign(SL); finally SL.Free; end; end; |
Re: IP-Adressen sortieren
Danke für die vielen Antworten!
Habe es jetzt mit einer SQL-Abfrage gelöst, da ich die IP-Adressen in einer Datenbank habe.
SQL-Code:
select ipadresse,
ip1=cast(substring(substring(ipadresse,8,10),1,patindex('%.%',substring(ipadresse,8,10))-1) as integeR), ip2=cast(substring(substring(ipadresse,8,10),patindex('%.%',substring(ipadresse,8,10))+1,10) as integer) from computer order by ip1,ip2 Resultat: ipadresse ip1 ip2 --------------- ----------- ----------- 10.250.74.13 74 13 10.250.90.10 90 10 10.250.90.11 90 11 10.250.90.12 90 12 10.250.90.20 90 20 10.250.150.4 150 4 10.250.150.5 150 5 10.250.150.6 150 6 10.250.150.7 150 7 10.250.150.8 150 8 10.250.150.9 150 9 10.250.150.10 150 10 PS. Funktioniert, da wir das Subnet 255.255.0.0 haben und somit 10.250. immer fix bleibt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz