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:
IP-Beispiel: 192.168.0.1
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; 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 |
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) MAKEIPADDRESS, 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. |
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:
greetz
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; -FastJack2 |
Re: IP-Summe berechnen
Da pos immer das erste vorkommen zurückliefert !
diese Zeile
Delphi-Quellcode:
durch diese ersetzen !
if pos('.',IPAdresse) = zaehler then begin
Delphi-Quellcode:
gruss
if IPAdresse[zaehler] = '.' then begin
hans |
Re: IP-Summe berechnen
[edit]...dieser post war überflussig hoch 3 :([/edit]
|
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; |
Re: IP-Summe berechnen
Das ist nicht faul, Sharky! Das nennt man "clever" :zwinker:
|
Re: IP-Summe berechnen
Zitat:
|
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:
und result an dieser Stelle so setzen:
for ndx := 0 to Pred (sl.Count) do
begin summe := summe + StrToInt (sl.Strings[ndx]); end;
Code:
und das andere result halt noch entfernen.
result := StrToInt(sl.Strings[0]) StrToInt(sl.Strings[1]) StrToInt(sl.Strings[2]) StrToInt(sl.Strings[3]);
Oder? :gruebel: Bin am Dazulernen. :mrgreen: MfG |
Re: IP-Summe berechnen
Zitat:
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. |
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