Entwickler-Ecke

Sonstiges (Delphi) - Anzahl zählen


tmkb - So 01.12.02 18:10
Titel: Anzahl zählen
Hallo,

Also ich habe eine Textdatei die folgendermaßen aufgebaut ist:



----------------------
192.168.0.4
Erreichbar: Nein
Druckerfreigabe: Aus

192.168.0.7
Erreichbar: Ja
Druckerfreigabe: Aus

192.168.0.12
Erreichbar: Ja
Druckerfreigabe: Ein

usw.
--------------------

Wie könnte ich jetzt am besten zählen wieviel IPs bzw wieviel Computer da jetzt drin stehn. Also im Beispiel sollte er auf 3 kommen usw. Die IPs sind aber nicht immer gleich aufgebaut. Wär cool wenn mir jemand sagen könnte wie ich in ner TXTfile die vorhandenen IPs zählen könnte.

mfg
Arne Unseld


Klabautermann - So 01.12.02 18:17

Hallo,

ich wüde vorschlagen du machst dir erst eine eine Funktion IsIP welcher du einen String übergibst und die True zurückliefert, wenn der Sting eine IP ist (also nut Ziffern und vier Punkt wobei Punkte weder am Anfang noch am ende stehen und auch nichtt Direckt aufeinander folgen. Auch darf keine der Ziffernfolgen einen Wert größer als 255 ergeben.).
Dann liest du deine TextDatei Zeilenweise ein (AssignFile, Resset, ReadLn, CloseFile). Jede Zeile jagst du durch deine Funktion IsIP und erhöst deinen Zähler um eins wenn True zurück kommt.

Gruß
Klabautermann


Keldorn - So 01.12.02 18:18

Hallo,

Vorraussetung: die Textdatei ist immer so aufgebaut: ein gedanke:
dann hast du Gesamte Zeilenanzahl und die Anzahl der Zeilen pro Rechner ist ja auch bekannt. Brauchst also nur Gesamtzeilenanzahl/Zeilen pro Rechner = Anzahl der Rechner.
oder du zähslt die Worte wie Druckerfreigabe oder Erreichbarkeit

Mfg Frank


Anonymous - So 01.12.02 20:05

Versuch es mal so. Du brauchst nur noch die Anzahl zusammen zu zählen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, k, p: Integer;
  s: String;
begin
  with Memo1 do for i := 0 to Lines.Count - 1 do if Length(Lines[i]) > 0 then
    if Lines[i][1] in ['0'..'9'] then begin
      s := ''; p := 0;

      for k := 1 to Length(Lines[i]) - 1 do
        if Lines[i][k] in ['0'..'9', '.'] then s := s + Lines[i][k] else Break;
        
      for k := 1 to Length(s) do if Lines[i][k] = '.' then Inc(p);

      if p = 3 then ShowMessage( 'Gefunden: ' + s );
    end;
end;


Eventuell muß das Eine oder Ander noch angepasst werden. Das ganze ist natürlich keine richtige Ip Prüfung, aber auf die Schnelle reicht es. Du willst ja nur zählen wie oft eine Ip vorkommt und nicht ob es eine Ip ist.


Delete - So 01.12.02 20:39

Für so was bietet sich doch eine Ini-Datei gerade zu an. IP als Schlüsselname und die Anzahl der Schlüssel sollte dann recht einfach bestimmbar sein. Ich habe mir da aber jetzt noch keine weiteren Gedanken über die Realisierbarkeit gemacht, war nur so ein Gedanke.