Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   boolsche's AND (https://www.delphipraxis.net/45411-boolsches.html)

Arnulf 5. Mai 2005 20:25


boolsche's AND
 
Hi
Also irgendwas versteh ich da falsch?
Es ist zwar lange her, daß ich programmieren gelernt hab aber Boolsche's AND gibt doch nur true zurück wenn beide Bedingungen auf TRUE sind.

Jetzt hab ich folgenden fall:

if (extracted > '20') and (extracted <> 'timeout')
then begin
bla bla
end;

In extracted steht '4' drin laut Debugger - warum wird aber 'bla bla' ausgeführt?
jetzt hab ich doch FALSE AND TRUE verknüft - das sollte doch FALSE zurückliefern oder nicht?

Arnulf

Airblader 5. Mai 2005 20:28

Re: boolsche's AND
 
Alles in Klammer setzen:

Delphi-Quellcode:
if((extracted > '20') AND (extracted <> 'timeout'))
Edit: Gibts denn keine Meldung? ein > bei einem String ist etwas seltsam :gruebel:

SirThornberry 5. Mai 2005 20:29

Re: boolsche's AND
 
extracted ist wie du geschrieben hast '4' und wenn man strings vergleicht wird vermutlich zeichen für zeichen verglichen. Das heißt, die ersten zeichen von den beiden strings werden verglichen. Sind diese verschieden werden die nächsten beiden verglichen, ansonsten eben nicht. Da aber '4' bereits größer '2' ist, ist extracted eben größer.
ansonsten solltest du
Delphi-Quellcode:
if (strtoint(extracted) > 20) and (extracted <> 'timeout')
verwenden was aber vermutlich nicht geht da extracted nicht zwangsläufig eine zahl zu sein scheint (ansonsten müsste "timeout" eine variable sein)

MathiasSimmack 5. Mai 2005 20:31

Re: boolsche's AND
 
Zitat:

Zitat von SirThornberry
extracted ist wie du geschrieben hast '4' und wenn man strings vergleicht wird vermutlich zeichen für zeichen verglichen. Das heißt, die ersten zeichen von den beiden strings werden verglichen. Sind diese verschieden werden die nächsten beiden verglichen, ansonsten eben nicht. Da aber '4' bereits größer '2' ist, ist extracted eben größer.

Genau. Kann man mit '123' nachvollziehen. Obwohl als Zahl größer als '20' in der Bedingung, wird es als String als kleiner erkannt.

Arnulf 5. Mai 2005 21:09

Re: boolsche's AND
 
Oje dann muß ich immer genau aufpassen was ich mache ...

Das einfachste wäre vermutlich wenn ich 20 binär verknüpfe dann hab ich die gesammte zahl als string.
Das ganze ist eine elend lange auswertung verschiedenster strings.
Das schaut so aus:

a : 4
b : hallo
c : 40
d : nein

extracted ist also immer der wert von a,b,c,d.
Ich weiß zwar ob ich einen string oder ein integer erwarte, aber leider wird es hier nicht so genau genommen mit strings und integer deshalb muß ich immer annehmen, daß es ein string sein könnte.

in dem Fall erwarte ich zwar einen zahlenwert, aber keiner garantiert es mir und dann muß ich auch noch prüfen ob der wert zu niedrig, zu hoch oder ob ich eben einen timeout bekommen hab.

In delphi bekomm ich ja bei strtoint eine EConvertError exception was auch nervt :).
In dem Fall kann man in C wohl besser pfuschen lol - dafür sucht man ewig nach dem fehler ....

Die eizige Lösung die mir einfallen würde, wäre alle bytes in dem string zu addieren und dann die integer zu vergleichen.
Naja mit Rechenleistung muß man ja nicht mehr sparen heutzutage.
Hat trotzdem jemand nocht einen bessere idee?

Bzw. gibt es eine einfache möglichkeit einen string binär zu addieren, ohne daß ich ein array of char mache und die in ner schleife addiere?.

Danke
Arnulf

SirThornberry 5. Mai 2005 21:23

Re: boolsche's AND
 
dann würde ich dir empfehlen zu prüfen ob es ein Integer ist oder nicht (TryIntToStr müsste es glaub ich geben). und dann je nach dem die prüfung anders durchführen.

DGL-luke 5. Mai 2005 21:44

Re: boolsche's AND
 
...oder auch val() oder inttostrdef().

Arnulf 5. Mai 2005 22:11

Re: boolsche's AND
 
Zitat:

TryIntToStr
existiert nicht

Zitat:

val()
ist wohl eine Art TryIntToStr

Zitat:

inttostrdef()
Das ist lustig - man findet so seltsame dinge auch nur in Delphi lol - strtointdef hald.

Da ich ja weiß, daß ich ein integer erwarte, kann ich bei inttostrdef einfach auf einen wert stellen der über den erwarteten liegt - oder hald unter - jeh nachdem, dann hab ich bei string immer true. das sollte reichen und ist mir als extrem faulen programmiere auch genug lol.

man lernt nie aus ...
so mach ichs jedenfalls mal - danke.
Delphi-Quellcode:
if extracted <> 'timeout' then
   if (strtointdef(extracted,21) > 20) then
       begin
       ....
       end;
Aber trotzdem wäre es interessant wie man das in Delphi lösen würde wenn ich diese funktionen nicht hätte.
Binäre addition der char's ist wohl immer noch die besste methode in dem fall oder?.
Und die einzige methode die mir da so auf die schnelle einfallen würde, wäre:

Delphi-Quellcode:
function addstringtoint (str : array of char; laenge : integer) : integer;
var i,added : integer;
begin
  for i := 1 to laenge do
    added := added + str[i]; //hab vergessen wie ich von einem character den ascii wert bekomme :)
  addstringtoint := added;
end;
.
.
.
var addedstr : integer;
begin
  addedstr := addstringtoint(mystring, lenght(addstring));
end;
Das sollte doch ebenfalls hinhauen oder?.

Arnulf

Nikolas 5. Mai 2005 22:16

Re: boolsche's AND
 
Delphi-Quellcode:
function addstringtoint (str : array of char; laenge : integer) : integer;
var i,added : integer;
begin
  for i := 1 to laenge do
    added := added + str[i]; //hab vergessen wie ich von einem character den ascii wert bekomme :)
  addstringtoint := added;
end;
hier wirst du Probleme damit bekommen, dass added nicht initialisiert wird, was dir Delphi auch melden sollte. Somit hast du da noch irgendwelchen Speichermüll in added stehen haben.
Ascii und zurück: chr\ord

SirThornberry 5. Mai 2005 22:21

Re: boolsche's AND
 
einfaches addieren geht auch nicht denn mit einfachem addieren wäre "18" größer als "20". Du musst beim addieren also auch noch die länge des strings beachten. Und als übergabeparameter kannst du anstelle von "str : array of char" auch gleich "str: String" nehmen


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 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