Also: Du wolltest einen Ansatz, deshalb hier ein kleines Progrämmchen für Dich.
Es generiert in OnFormCreate 10.000 IPs der Form 192.168.xxx.xxx. Außerdem werden noch 20 IPs der Form 192.169.xxx.xxx generiert.
Man kann jetzt einen gleichbleibenden Anfangsstring eingeben, in unserem Fall "192.168.".
Klickt man auf den Button wird die von Dir gewünschte Statistik erstellt und ausgegeben. Dabei werden IPs die mit "192.168." beginnen gezählt, der Rest (also in unserem Fall 20) werden unter "andere" aufgeführt.
Momentan geht das Programm davon aus, dass nach dem "192.168." drei relevante Zeichen kommen nach denen es die Gruppen bildet. Das erschien mir sinnvoll, da es ja um IPs geht. Aber man kann das ja auch, wenn gewünscht, entsprechend abändern.
Natürlich ist alles noch
sehr verbesserungsbedürftig, aber das ist ja auch nur ein Ansatz
Viel Spaß damit und frohe Ostern!
Der Quelltext (in ListBox1 stehen die IPs, in ListBox2 wird das Ergebnis ausgegeben):
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
anz,laenge,i:integer;
pname,anfang,gekuerzt:string;
liste:tstringlist;
procedure neue_ip(s:string);
begin
liste.add(s+': 1');
end;
function anzahl_ip(s:string):integer;
var
i:integer;
temp:string;
begin
for i:=0 to liste.count-1 do begin
temp:=copy(liste[i],1,length(s));
if temp=s then begin
temp:=liste[i];
break;
end;
temp:='';
end;
if temp='' then begin
anzahl_ip:=0;
end else begin
anzahl_ip:=strtoint(copy(temp,pos(':',temp)+1,length(temp)-pos(':',temp)));
end;
end;
procedure update_ip(s:string;anzahl:integer);
var
i:integer;
temp:string;
begin
for i:=0 to liste.count-1 do begin
temp:=copy(liste[i],1,length(s));
if temp=s then begin
liste[i]:=s+': '+inttostr(anzahl);
end;
end;
end;
begin
liste:=tstringlist.create();
anfang:=edit1.text;
laenge:=length(edit1.text)+3;
for i:=0 to listbox1.items.count-1 do begin
gekuerzt:=copy(listbox1.items[i],1,laenge);
if copy(gekuerzt,1,laenge-3)=anfang then
pname:=copy(listbox1.items[i],1,laenge)
else
pname:='andere';
anz:=anzahl_ip(pname);
if anz=0 then
neue_ip(pname)
else
update_ip(pname,anz+1);
end;
listbox2.Items:=liste;
end;