Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
|
Re: IP Range
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;
|
|
Zitat
|