Thema: IP Range

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: IP Range

  Alt 20. Mär 2006, 07:15
Begründung:

Gruß Hagen

Delphi-Quellcode:

type
  PIp = record // <- TYPEN fangen mit T an
    p1 : String;
    P2 : String;
    p3 : String;
    p4 : String;
    end; // <- Einrückungen, ein Block immer auf gleicher Höhe

type
MyIP = packed record // <- Einrückungen
  case Byte of
    0: (D,C,B,A : Byte);
    1: (dwValue : DWord);
  end;

function SplittIP(IP: string): PIp; // <- String ist eigener Type also S groß bei String
var
  I: Integer;
begin
  Result.p1 := '';
  Result.p2 := '';
  Result.p3 := '';
  Result.p4 := '';

  I := 0;
  repeat
    Inc(I, 1);
    if IP[I] <> '.then // <- Hier AV bei IP = ''
      Result.p1 := Result.p1+IP[I]; // <- Leerzeichen zwischen Operatoren, alles am + geklitscht
  until
     IP[I] = '.'; // <- eine Zeile höher, ist ja wohl nur schlecht
....
end;

function CreateIPPool(sStartIp, sEndIp: String): TStringList;
var
FromIP, ToIP, IP: MyIP; // <- Einrückungen
I: Integer;
Adress: PIp;
begin
  Result := TStringList.Create; // <- Allokation und Rückgabe von komplexen Datentypen sollte man vermeiden
                                 // besser ist es als Paramater Strings: TStrings zu übergeben damit der Aufrufer
                                 // der Funktion für die Datenhaltung verantwortlich bleibt.
  Adress := SplittIP(sStartIp);
  with FromIP do begin // <- begin markiert einen neuen Source/Formtierungs Block, gehört in die nächste
                                 // Zeile direkt unter das with.
    A := StrToInt(Adress.p1);
    B := StrToInt(Adress.p2);
    C := StrToInt(Adress.p3);
    D := StrToInt(Adress.p4);
    end;

  Adress := SplittIP(sEndIp);
  with ToIP do begin
    A := StrToInt(Adress.p1);
    B := StrToInt(Adress.p2);
    C := StrToInt(Adress.p3);
    D := StrToInt(Adress.p4);
    end;

  for I := FromIP.dwValue to ToIP.dwValue do begin // <- begin
    IP.dwValue := I;
    with IP do
      Result.Add(Format('%d.%d.%d.%d',[A,B,C,D]));
    end;
end;
  Mit Zitat antworten Zitat