Fehler in der IN - Abfrage

  • 1
  • 2
  • 3
  • Page 1 of 3
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Fehler in der IN - Abfrage

 · 
Posted: 04.01.2013 - 11:02  ·  #1
Hallo alle AVRco-User,
hallo Rolf,

ein gutes, neues Jahr euch allen!

Nach den guten Wünschen habe ich noch ein kleines Problem beim IN Operator - im Falle von mehreren Bereichs-Abfragen. Je nach Variablen-Typ funktioniert die Abfrage korrekt - oder eben nicht. Das folgende Beispiel verdeutlicht es vielleicht:

[code]
lBy0 := 50;         // Byte-Variable
lWo := 1234;        // Word-Variable
lLW := 12345678;    // LongWord-Variable

if lBy0 In [1..3,49..51] Then
   SLIP_WriteStr('TXT|50 ist drin!');   // Abfrage landet hier - OK.
else
   SLIP_WriteStr('TXT|50 ist NICHT drin!');
endif;

if lWo In [1..3,1230..1239] Then
   SLIP_WriteStr('TXT|1234 ist drin!');
else
   SLIP_WriteStr('TXT|1234 ist NICHT drin!');   // Abfrage landet hier!!!! Nicht OK.
endif;

if lLW In [1..3,12345670..12345679] Then
   SLIP_WriteStr('TXT|12345678 ist drin!');
else
   SLIP_WriteStr('TXT|12345678 ist NICHT drin!');   // Abfrage landet hier!!!! Nicht OK.
endif;

if lLW In [12345670..12345679] Then
   SLIP_WriteStr('TXT|12345678 ist drin!');   // Abfrage landet hier. OK.
else
   SLIP_WriteStr('TXT|12345678 ist NICHT drin!');
endif;
[/code]

Dieser Code gibt folgende Ausgabe:

50 ist drin!
1234 ist NICHT drin!
12345678 ist NICHT drin!
12345678 ist drin!

Man sieht, daß es bei einer Byte-Variablen geht, bei Word oder Longword-Variablen jedoch nicht. Wenn aber z.B. nur ein einzelner Bereich beim LongWord abgefragt wird, dann geht es doch.

Ich hoffe, ich habe das Problem rübergebracht.

Grüße, Michael
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 04.01.2013 - 11:23  ·  #2
PS: Mit Float funktioniert es, mit Fix64 geht es nicht, der Compiler weigert sich mit der Fehlermeldung "ERROR: Byte or Char expected" zu compilieren..
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 07.01.2013 - 09:09  ·  #3
Hallo Rolf,

darf ich dieses Thema noch einmal nach vorn holen? Es ist schon blöd, daß man immer dran denken muß, daß Bereichs-Abfrage mit (z.B.) Words zwar kompiliert werden, aber falsche Ergebnisse liefern.

Ich finde schon, daß die Zeilen

lWo := 1234;
if lWo In [1..3,1230..1239] Then...

ein True liefern sollten und kein False...

Gruß, Michael
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 07.01.2013 - 20:49  ·  #4
Hallo Michael,
ich habe diese multiple-choice Abfrage bei words zumindest vorläufig abgeschaltet.
Sollte im heutigen update drin sein.
rolf
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 14.01.2013 - 17:17  ·  #5
Hallo Rolf,

da haben Sie ja gründlich abgeschaltet...
Eine Abfrage, die korrekt lief, wie z. B.

If lWord IN [$1234,$5678] Then

wird nach dem Update vom Compiler nicht mehr angenommen. Also Source wieder umschreiben... Es ging nur um mehrfache Bereichsabfragen, genau wie in den Beispielen am Threadanfang beschrieben. Die einfache Bereichsabfrage geht aber Gott sei Dank noch.

Sagen Sie einfach Bescheid, wenn Sie in das Thema noch einmal rein geschaut haben. Ich hab erst mal alles angepasst, also kein Problem mehr.

Jedenfalls haben Sie recht, es ist besser, daß etwas vom Compiler nicht übersetzt wird, wo es noch Problemchen gibt.

Grüße, Michael
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 14.01.2013 - 18:10  ·  #6
Hallo Michael,
ja, ich habe da einen radikalen Schnitt gemacht. Lieber eine Fehlermeldung anstatt
einem fehlerhaften Programm. Ich werde mir das bei Gelegenheit nochmal vornehmen.
Ist leider nicht ganz trivial, auch wenns so aussieht.

rolf
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 08.07.2014 - 13:44  ·  #7
Hallo Rolf,

ich habe ein eigenartiges Phänomen bei einer IN - Abfrage mit Float-Werten.
In einer Prozedur habe ich mit
Var
lFl : Float;

definiert. Wenn ich nun die Bereichsabfrage

lFl := 2.3;
If (lFl In [-5..5]) Then
WritelnFile('Im Bereich!', lBackupToFile);
Else
WritelnFile('Nicht im Bereich!', lBackupToFile);
EndIf;

laufen lasse, bekomme ich korrekterweise die Anwort "Im Bereich!". Soweit, so gut. Wenn ich aber nun die Logik und die Ausgabe-Texte umdrehe:

lFl := 2.3;
If Not (lFl In [-5..5]) Then
WritelnFile('Nicht Im Bereich!', lBackupToFile);
Else
WritelnFile('Im Bereich!', lBackupToFile);
EndIf;

dann bekomme ich seltsamerweise nicht die Ausgabe "Im Bereich", sondern "Nicht im Bereich!"
Da scheint etwas nicht zu stimmen.

Gruß, Michael
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 08.07.2014 - 14:46  ·  #8
Hallo Michael,
ich kann dir natürlich nicht weiterhelfe. Ich wusste bis heute nicht einmal, dass man den in-Operator für sowas verwenden kann. Ich benutze den in Operator nur bei Bitsets und Bereichsüberprüfungen mache ich mit < > oder mit valueinRange aber wie das geht weißt du ja sicherlich selbst.

Ich habe allerdings selber eine Frage, bei der du mir sicher weiterhelfen kannst.
Wie kann man Stringkonstanten an eigene Funktionen übergeben? Wie sieht z.B. dein Prototyp für WritelnFile aus?

Ich hoffe das "Du" war okay.

Gruß
Thomas
  • 1
  • 2
  • 3
  • Page 1 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   136   150 · Page-Gen-Time: 0.028442s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI