Einzelnen Beitrag anzeigen

Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Gleich beginnende Strings zählen

  Alt 26. Mär 2005, 06:50
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;
Miniaturansicht angehängter Grafiken
screen2_140.jpg   screen1_808.jpg  
Angehängte Dateien
Dateityp: zip test_179.zip (160,0 KB, 5x aufgerufen)
Peter J. Schneider
http://raketenwerfer.de/programmieren/delphi/index.html
Nes dar in da kev, sed un est a log!
  Mit Zitat antworten Zitat