![]() |
Gleich beginnende Strings zählen
Hallo,
ich habe heute mal wieder echt keinen Plan, wie ich ein Problem angehen soll. Gegeben ist mir eine Stringlist mit vielen IPs. Diese möchte ich untersuchen nach Häufigkeit in bestimmten Bereichen (im Sinne einer Statistik). Nach dem Bearbeiten möchte ich eine Liste haben wie folgt: 192.168.0.* = 20 IPs 192.168.1.* = 0 IPs 192.168.2.* = 7 IPs Jemand einen Lösungsansatz für mich? MfG |
Re: Gleich beginnende Strings zählen
Liste der Anhänge anzeigen (Anzahl: 3)
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 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