AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Hilfe! Fehler wo eigentlich keiner sein sollte!
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe! Fehler wo eigentlich keiner sein sollte!

Ein Thema von akira1983 · begonnen am 30. Sep 2003 · letzter Beitrag vom 1. Okt 2003
Antwort Antwort
akira1983

Registriert seit: 18. Sep 2003
Ort: http://arbeitsrechner.terra.local
19 Beiträge
 
Delphi 7 Personal
 
#1

Hilfe! Fehler wo eigentlich keiner sein sollte!

  Alt 30. Sep 2003, 09:09
Ich habe folgendes Code in meiner Komponente, die eine IP auf Gültigkeit überprüft:

Delphi-Quellcode:
procedure TIPCheck.PruefeIP(Sender:TObject);
var
  temp1:integer; temp2:integer; // Variablendefinition
  temp3:integer; temp4:integer; // Variablendefinition
  byte1s:string; byte2s:string; // Variablendefinition
  byte3s:string; byte4s:string; // Variablendefinition
  byte1i:integer; byte2i:integer; // Variablendefinition
  byte3i:integer; byte4i:integer; // Variablendefinition
  ok:boolean; // Variablendefinition
begin
  ok:=false; // Initialisierung der Variable
  temp1:=-1; // Initialisierung der Variable
  temp2:=-1; // Initialisierung der Variable
  temp3:=-1; // Initialisierung der Variable
  temp4:=-1; // Initialisierung der Variable
  if copy(text,1,1)='.then temp1:=1; // Feststellung wo Byte endet
  if copy(text,2,1)='.then temp1:=2; // Feststellung wo Byte endet
  if copy(text,3,1)='.then temp1:=3; // Feststellung wo Byte endet
  if copy(text,temp1+3,1)='.then temp2:=1; // Feststellung wo Byte endet
  if copy(text,temp1+4,1)='.then temp2:=2; // Feststellung wo Byte endet
  if copy(text,temp1+5,1)='.then temp2:=3; // Feststellung wo Byte endet
  if copy(text,temp1+temp2+3,1)='.then temp3:=1; // Feststellung wo Byte endet
  if copy(text,temp1+temp2+4,1)='.then temp3:=2; // Feststellung wo Byte endet
  if copy(text,temp1+temp2+5,1)='.then temp3:=3; // Feststellung wo Byte endet
  if copy(text,temp1+temp2+temp3+3,1)='.then temp4:=1; // Feststellung wo Byte endet
  if copy(text,temp1+temp2+temp3+4,1)='.then temp4:=2; // Feststellung wo Byte endet
  if copy(text,temp1+temp2+temp3+5,1)='.then temp4:=3; // Feststellung wo Byte endet
  byte1s:=copy(text,0,temp1); // Umwandlung der gesamten IP-Adresse in Byte
                                          // Speicherung als String
  byte2s:=copy(text,temp1+1,temp2); // Umwandlung der gesamten IP-Adresse in Byte
                                          // Speicherung als String
  byte3s:=copy(text,temp2+1,temp3); // Umwandlung der gesamten IP-Adresse in Byte
                                          // Speicherung als String
  byte4s:=copy(text,temp3+1,temp4); // Umwandlung der gesamten IP-Adresse in Byte
                                          // Speicherung als String
  byte1i:=strtoint(byte1s); // Umwandlung des String in Integer
  byte2i:=strtoint(byte2s); // Umwandlung des String in Integer
  byte3i:=strtoint(byte3s); // Umwandlung des String in Integer
  byte4i:=strtoint(byte4s); // Umwandlung des String in Integer
  if (byte1i<256) then ok:=true; // Prüfung, ob Byte gültig ist (Zahl kleiner als 256)
  if (byte2i<256) then ok:=true; // Prüfung, ob Byte gültig ist (Zahl kleiner als 256)
  if (byte3i<256) then ok:=true; // Prüfung, ob Byte gültig ist (Zahl kleiner als 256)
  if (byte4i<256) then ok:=true; // Prüfung, ob Byte gültig ist (Zahl kleiner als 256)
  if not ok then // Wenn Prüfungen nicht bestanden
    raise TUngueltigeAdresse.Create('IP-Adresse nicht korrekt!'); // Fehlermeldung
end;
wenn ich das ding dann nun in einer testapp teste und nur eine einzige zahl eingebe, meldet mir delphi


Code:
"" ist kein gültiger Integerwert
weiss irgendjemand weiter?

ich habe das komponentenverzeichnis als .zip angehangen

[edit=sakura]BBCode zulassen. Mfg, sakura[/edit]
Angehängte Dateien
Dateityp: zip tools.zip (7,2 KB, 3x aufgerufen)
Gruß aus Krefeld

akira1983
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Hilfe! Fehler wo eigentlich keiner sein sollte!

  Alt 30. Sep 2003, 09:39
Hallo,

das liegt daran, dass bei strtoint() ein Leerzeichen übergeben wird.
Da ein leerer String nicht in eine Zahl umgewandelt werden kann, erhälst Du die Fehlermeldung.

Um dies zu verhindern, musst Du die entsprechenden Variablen darauf überprüfen, ob Sie überhaupt etwas enthalten:
if (byte2s<>'') then byte2i:=strtoint(byte2s); oder Du packst die Umwandlung in einen try..except-Block:
Delphi-Quellcode:
  try
    byte2i:=strtoint(byte2s);
  except
    byte2i:=0;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Hilfe! Fehler wo eigentlich keiner sein sollte!

  Alt 30. Sep 2003, 10:01
Hallo,

Deine Routine kann man auch noch etwas optimieren:

Delphi-Quellcode:
// Annahme, dass Adresse in der Form "127.0.0.1" oder "127..." übergeben wird
type
  TIpArr=array[0..3] of Integer;

procedure TIPCheck.PruefeIP(Sender:TObject);
var i, j:Integer;
    n :TIpArr;
    s :String;
begin
  s:=''; j:=0;
  FillChar(n, SizeOf(TIpArr), -1);
  for i:=1 to Length(text) do
  begin
    if (text[i]<>'.') then
    begin
      if (text[i] in ['0'..'9']) then s:=s+text[i];
    end
    else
    begin
      if (s<>'') then n[j]:=StrToInt(s);
      Inc(j);
      s:='';
    end; // else if
  end; // for i
  // für den Teil nach dem letzten Punkt
  if (s<>'') then n[j]:=StrToInt(s)
    else n[j]:=-1;
  // überprüfen ob alle 4 Bereiche der IP-Adresse gültig sind:
  for i:=0 to 3 if (n[i]=-1) then
  begin
    raise TUngueltigeAdresse.Create('IP-Adresse nicht korrekt!');
    break;
  end; // for i
end; // TIPCheck.PruefeIP
  Mit Zitat antworten Zitat
akira1983

Registriert seit: 18. Sep 2003
Ort: http://arbeitsrechner.terra.local
19 Beiträge
 
Delphi 7 Personal
 
#4

Re: Hilfe! Fehler wo eigentlich keiner sein sollte!

  Alt 30. Sep 2003, 10:11
THX very viel!
Gruß aus Krefeld

akira1983
  Mit Zitat antworten Zitat
Honie

Registriert seit: 27. Sep 2003
Ort: Bielefeld
39 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Hilfe! Fehler wo eigentlich keiner sein sollte!

  Alt 1. Okt 2003, 07:39
Hi,

um links oder rechtsbündige Leerzeichen zu eliminieren kannst Du
auch die trim-funktion benutzen.

Für Umwandlungen von Strings in Zahlen schlage ich folgenden Code vor.


var
s: string;
i: integer;

begin
s := ' 4711 ';
try
i := StrToInt(trim(s))
except
i := 0; (oder was auch immer)
end;
// i := 4711;
end;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Hilfe! Fehler wo eigentlich keiner sein sollte!

  Alt 1. Okt 2003, 11:05
Moin Honie,

statt try/except kann man in diesem Falle auch StrToIntDef verwenden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:29 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