Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IP-Summe berechnen (https://www.delphipraxis.net/28925-ip-summe-berechnen.html)

knödel 1. Sep 2004 12:12


IP-Summe berechnen
 
Ich habe mir eine Funktion gebastelt, die mir die Summe der einzelnen IP-Stückchen berechnen und als string zurückgeben soll.

Code:
function IPSumme(IPAdresse : string): string;
var
  IPs : array[0..3] of string;
  zaehler : Integer;
  IPzaehler : Integer;
begin
  IPs[0] := '';  IPs[1] := '';  IPs[2] := '';  IPs[3] := '';
  IPzaehler := 0;
  for zaehler := 1 to Length(IPAdresse) + 1 do begin
    if pos('.',IPAdresse) = zaehler then begin
      // ein . ? dann nächster IP-Teil
      IPzaehler := IPzaehler + 1;
    end else begin
      IPs[IPzaehler] := IPs[IPzaehler] + copy(IPAdresse,zaehler,1);
    end;
  end;

  Result := IntToStr(StrToInt(IPs[0]) + StrToInt(IPs[1]) + StrToInt(IPs[2]) + StrToInt(IPs[3]));
end;
IP-Beispiel: 192.168.0.1

Jedoch wird jedes mal der erste Teil (192) richtig an IPs[0] zugewiesen, aber der komplette Restteil (168.0.1) an IPs[1] und dem Rest dann nichts mehr. (habe ich durch setzen ShowMessages rausbekommen)

Ich konnte nach über 30 Minuten hin- und herprobieren leider den Fehler nicht finden. :gruebel:

Vielleicht sticht er ja einem von euch Erfahrenen (Delphi-Profis) gleich ins Gesicht. :nerd:

MfG

MathiasSimmack 1. Sep 2004 12:19

Re: IP-Summe berechnen
 
Die einfachste Variante: Du ermittelst aus den vier Stellen die jeweiligen Zahlen. Eben aus "192.168.0.1" die 192, 168, Null und Eins. Dann benutzt du das fertige Makro (= Funktion) MSDN-Library durchsuchenMAKEIPADDRESS, das daraus einen 32-Bit-Wert berechnet. Wolltest du das wissen?

Wenn Ja, dann schau dir mal das Kapitel über das IP-Adress-Control in Luckies Tutorials an. Da wird die Funktion (und auch die Gegenstücke FIRST_IPADRESS, SECOND_*, ...; zum Ermitteln der einzelnen Ziffern) erwähnt.

FastJack2 1. Sep 2004 12:27

Re: IP-Summe berechnen
 
Hy ... also ich bin der Meinung, der Fehler liegt bei pos();

aus der OH:

Die Funktion gibt den Indexwert des ersten Zeichens innerhalb des angegebenen Teil-Strings zurück, der in einem String vorkommt

hab deine funktion mal nen bissel abgewandelt ... sollte jetzt funktionieren :)

Code:
function IPSumme(IPAddy: string): string;
var
  IPs: array[0..2] of byte;
  IPZaehler, cnt: Integer;
  tmp: String;
begin
  result := '';
  try
    IPs[0] := 0;
    IPs[1] := 0;
    IPs[2] := 0;
    IPzaehler := 0;
    tmp := '';
    for cnt := 1 to Length(IPAddy) + 1 do
    begin
      if IPAddy[cnt] = '.' then
      begin
        IPs[IPZaehler] := strtoint(tmp);
        tmp := '';
        inc(IPZaehler);
      end
      else
      begin
        tmp := tmp + IPAddy[cnt];
      end;
    end;
    result := inttostr(IPs[0] + IPs[1] + IPs[2] + strtoint(tmp));
  except
    result := '';
  end;
end;
greetz
-FastJack2

Gruber_Hans_12345 1. Sep 2004 12:28

Re: IP-Summe berechnen
 
Da pos immer das erste vorkommen zurückliefert !

diese Zeile
Delphi-Quellcode:
    if pos('.',IPAdresse) = zaehler then begin
durch diese ersetzen !

Delphi-Quellcode:
    if IPAdresse[zaehler] = '.' then begin
gruss
hans

FastJack2 1. Sep 2004 12:31

Re: IP-Summe berechnen
 
[edit]...dieser post war überflussig hoch 3 :([/edit]

Sharky 1. Sep 2004 12:35

Re: IP-Summe berechnen
 
Da ich faul bin nutze ich einfach alles was mir D7 zur verfügung stellt :stupid:
Delphi-Quellcode:
function IPSumme(IPAdresse : string): Integer;
var
  sl : TStringList;
  summe : Integer;
  ndx : Integer;
begin
  summe := 0;
  sl := TStringList.Create;
  try
    sl.Delimiter := '.';
    sl.DelimitedText := IPAdresse;
    for ndx := 0 to Pred (sl.Count) do
    begin
      summe := summe + StrToInt (sl.Strings[ndx]);
    end;
  finally
    sl.Free;
  end;
  result := summe;
end;

MathiasSimmack 1. Sep 2004 12:43

Re: IP-Summe berechnen
 
Das ist nicht faul, Sharky! Das nennt man "clever" :zwinker:

Phoenix 1. Sep 2004 12:44

Re: IP-Summe berechnen
 
Zitat:

Zitat von MathiasSimmack
Das ist nicht faul, Sharky! Das nennt man "clever" :zwinker:

Also ich bin der Meinung, das man schon sehr Faul sein muss, um einen guten, in Deinen Worten cleveren Entwickler abzugeben ;-)

knödel 1. Sep 2004 13:02

Re: IP-Summe berechnen
 
Wunderbar!
Ich danke euch allen für eure wunderbare Hilfe! :)

Den Vorschlag von Gruber_Hans_12345 habe ich jetzt verwendet,
die anderen werde ich aber ebenfalls nochmals genau begutachten, vor allem das mit dem Delimiter.

Wenn ich Delimiter richtig verstanden habe, könnte ich theoretisch bei Sharky's Lösung auch diese Schleife weglassen:

Code:
for ndx := 0 to Pred (sl.Count) do
    begin
      summe := summe + StrToInt (sl.Strings[ndx]);
    end;
und result an dieser Stelle so setzen:
Code:
result := StrToInt(sl.Strings[0]) StrToInt(sl.Strings[1]) StrToInt(sl.Strings[2]) StrToInt(sl.Strings[3]);
und das andere result halt noch entfernen.

Oder? :gruebel:

Bin am Dazulernen. :mrgreen:

MfG

Sharky 1. Sep 2004 13:07

Re: IP-Summe berechnen
 
Zitat:

Zitat von knödel
...und result an dieser Stelle so setzen:
Code:
result := StrToInt(sl.Strings[0]) StrToInt(sl.Strings[1]) StrToInt(sl.Strings[2]) StrToInt(sl.Strings[3]);
und das andere result halt noch entfernen....

Jup,
so würde es auch gehen.
TStringList.Delimiter und TStringList.DelimitedText ist in der OnlineHilfe eigentlich ganz gut beschrieben und hat mir schon viel Arbeit erleichtert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz