AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IP-Summe berechnen

Ein Thema von knödel · begonnen am 1. Sep 2004 · letzter Beitrag vom 1. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
knödel

Registriert seit: 1. Aug 2004
Ort: Illertissen
29 Beiträge
 
Delphi 7 Personal
 
#1

IP-Summe berechnen

  Alt 1. Sep 2004, 12:12
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.

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

MfG
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 12:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von FastJack2
FastJack2

Registriert seit: 22. Mär 2004
Ort: Lübeck
54 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 12:27
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
wo unrecht zu recht wird, wird widerstand zur pflicht ! (c) '98 - WoF board
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#4

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 12:28
Da pos immer das erste vorkommen zurückliefert !

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

    if IPAdresse[zaehler] = '.then begin gruss
hans
  Mit Zitat antworten Zitat
Benutzerbild von FastJack2
FastJack2

Registriert seit: 22. Mär 2004
Ort: Lübeck
54 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 12:31
[edit]...dieser post war überflussig hoch 3 :([/edit]
wo unrecht zu recht wird, wird widerstand zur pflicht ! (c) '98 - WoF board
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#6

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 12:35
Da ich faul bin nutze ich einfach alles was mir D7 zur verfügung stellt
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 12:43
Das ist nicht faul, Sharky! Das nennt man "clever"
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#8

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 12:44
Zitat von MathiasSimmack:
Das ist nicht faul, Sharky! Das nennt man "clever"
Also ich bin der Meinung, das man schon sehr Faul sein muss, um einen guten, in Deinen Worten cleveren Entwickler abzugeben
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
knödel

Registriert seit: 1. Aug 2004
Ort: Illertissen
29 Beiträge
 
Delphi 7 Personal
 
#9

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 13:02
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?

Bin am Dazulernen.

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#10

Re: IP-Summe berechnen

  Alt 1. Sep 2004, 13:07
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 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