Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit if-Abfrage! (https://www.delphipraxis.net/43737-probleme-mit-if-abfrage.html)

Speedmaster 7. Apr 2005 21:13


Probleme mit if-Abfrage!
 
Bei folgender Funktion trit der Fehler auf das er schon in der Ersten Zeile False zurückgibt, vorher bei der "Debug" abfrage allerdings der Wert True zurückgegeben wird. Daher Stellt sich mir die Frage ob die Anzahl der if Abfragen in einer if verzweigung begrenzt sind??

Delphi-Quellcode:
function TswOptions.CheckIni(Skin: String):Boolean;
var
  IFile: TMemIniFile;
  Test: Boolean;
begin
  try
    IFile := TMemIniFile.Create(Skin);
    // Überprüfung ob die Skindatei vollständig ist
    Test := IFile.SectionExists('swMain');  // Debug
    if IFile.SectionExists('swMain')       and
     IFile.SectionExists('swExit')         and
     IFile.SectionExists('swMapeditor')    and
     IFile.SectionExists('swSingleplayer') and
     IFile.SectionExists('swMultiplayer')  and
     IFile.SectionExists('swRefresh')      and
     IFile.SectionExists('swJoin')         and
     IFile.SectionExists('swCancel')       and
     IFile.SectionExists('swHost')         and
     IFile.SectionExists('swmHost')        and
     IFile.SectionExists('swNames')        and
     IFile.SectionExists('swIPList')       and
     IFile.SectionExists('swLIBevel')      and
     IFile.SectionExists('swIPBevel')      and
     IFile.SectionExists('swLogIn')        and
     IFile.SectionExists('swCancelLI')     and
     IFile.SectionExists('swAPLogo')       and
     IFile.SectionExists('swPassEdit')     and
     IFile.SectionExists('swUserEdit')     and
     IFile.SectionExists('swIPCancel')     and
     IFile.SectionExists('swhCommentEdit') and
     IFile.SectionExists('swhPasswordEdit') and
     IFile.SectionExists('swOptions')      and
     IFile.SectionExists('swPlayerBox')    and
     IFile.SectionExists('swTeamBox')      and
     IFile.SectionExists('swMapLabel')     and
     IFile.SectionExists('swGSpeedBox')    and
     IFile.SectionExists('swHBevel')       and
     IFile.SectionExists('swOFileListBox') and
     IFile.SectionExists('swOSelectSkin')  and
     IFile.SectionExists('swOApply')       and
     IFile.SectionExists('swOCancel')      and
     IFile.SectionExists('swOSearchIni')   and
     IFile.SectionExists('swOSoundChannelBox') and
     IFile.SectionExists('swOBevel')       and
     // Zweites Fenster
     IFile.SectionExists('smMain')         and
     IFile.SectionExists('smSearchBoxEdit') and
     IFile.SectionExists('smSelectMap')    and
     IFile.SectionExists('smCancel')       and
     IFile.SectionExists('smFileListBox')  then
     Result := True else Result := False;
    IFile.Free;
  except
    MessageDlg('Error: Unable to open skin file',mtInformation, [mbOk], 0);
  end;
end;

Dax 7. Apr 2005 21:16

Re: Probleme mit if-Abfrage!
 
Das einzige, was die Zahl der Abfragen limitiert, ist die Geschwindigkeit deines Prozessors und die Größe deines Speichers, der den ganzen Assemblercode aufnehmen muss ;-)

Speedmaster 7. Apr 2005 21:19

Re: Probleme mit if-Abfrage!
 
Zitat:

Zitat von Dax
Das einzige, was die Zahl der Abfragen limitiert, ist die Geschwindigkeit deines Prozessors und die Größe deines Speichers, der den ganzen Assemblercode aufnehmen muss ;-)

Dennoch gibt er einen falschen Wert zurück, woran liegt das?

SirThornberry 7. Apr 2005 21:22

Re: Probleme mit if-Abfrage!
 
auch wenn du die if-Bedingungen umbrichst gibt es dafür nur einen haltepunkt. Setzte doch einfach einen haltepunkt und stelle die einzelnen bedingungen in die watches, dann siehst du was nicht stimmt.
Oder du machst einfach eine verschaltete if-anweisung drauf
Delphi-Quellcode:
result := False;
if IFile.SectionExists('swMain') then
  if IFile.SectionExists('swExit') then
    if IFile.SectionExists('swMapeditor') then
      [...]
      result := True

Speedmaster 7. Apr 2005 21:24

Re: Probleme mit if-Abfrage!
 
Zitat:

Zitat von SirThornberry
auch wenn du die if-Bedingungen umbrichst gibt es dafür nur einen haltepunkt. Setzte doch einfach einen haltepunkt und stelle die einzelnen bedingungen in die watches, dann siehst du was nicht stimmt.

Leider habe ich das schon Lange gemacht, das hatte ich glaube ich auch oben ungefähr ausgedrückt. Er bricht bei der ersten Abfrage ab('swMain'), oben drüber gibt er aber den richtigen Wert aus!! :(

SirThornberry 7. Apr 2005 21:26

Re: Probleme mit if-Abfrage!
 
ich denk mal du debuggst falsch (soll kein vorwurf sein). Versuchs doch noch so wie ich es in meinem letzten beitrag geschrieben hab mit den verschatelten if's

bttb930 7. Apr 2005 21:33

Re: Probleme mit if-Abfrage!
 
yep, das sehe ich genauso. Dass der Debugger scheinbar nach der ersten zeile zum else springt bedeutet gar nichts, denn der sieht alle durch and verknüpften zeilen als eine.

übrigens mußt du gar nicht schreiben

Delphi-Quellcode:
if a and b and c and d and e then Result := True else Result := False;
sondern kannst auch schreiben

Delphi-Quellcode:
Result := a and b and c and d and e;

Muetze1 7. Apr 2005 21:39

Re: Probleme mit if-Abfrage!
 
Moin!

bttb930 war nun schneller >>>>>
Das er in der ersten If Anweisung gleich False zurückgibt, sieht für dich nur so aus, da der Compiler keinen Code pro If Abfrageteil angibt und somit der Debugger einfach nur: If Bedingung und Verzweigung der If Bedingung kennt. Daher muss nur ein Element deiner AND Verknüpfung fehlschlagen (welches auch immer) und dann gibt er schon false zurück und macht sich nicht mehr die Arbeit den Rest abzuprüfen. Und dabei ist wie gesagt nicht rückschliessbar, das es die erste Bedingung der AND Abfrage ist...
<<<<<

Existieren 120%ig alle aufgeführten Sektionen in dem MemIni File?

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.

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