Fehler in der IN - Abfrage

  • 1
  • 2
  • 3
  • Page 2 of 3
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 - 16:15  ·  #9
Hallo Thomas,

ganz einfach (verbrät natürlich 100 Byte auf dem Frame!) - Compilerschalter habe ich sonst nicht dafür gesetzt:

Procedure WritelnFile (lStr : String[100]; lBackupFile : Boolean);
Begin
Writeln(SerOut, lStr);
If lBackupFile Then
Writeln(FoT, lStr);
EndIf;
End;

Gruß, Michael

PS: Klar, Du ist OK!
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 - 16:40  ·  #10
alles klar, habe ich verstanden.

wie ist das bei Writeln(SerOut,'irgend ein Text') implementiert. Hat man da auch diesen Frameverbrauch?
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 08.07.2014 - 16:51  ·  #11
Hi Thomas.

It does consume a lot of frame to make a call like Michaels, but has great flexibility so like WriteLnFile( 'Fred is ' + HealthStateString ); is OK. But If you are prepared to sacrifice the flexibility, passing a pointer is kinder to the stack.
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 11.07.2014 - 10:37  ·  #12
Der Frameverbrauch ist hässlich, vor allem dann, wenn man einen Wrapper um Writeln erstellt.
Da doch lieber die Pointerlösung.

Besteht bei meiner Lösung die Gefahr eines Laufzeitfehlers oder gibt es andere Kritik?

Code
Implementation
{$IDATA}
alias
    SerOutPC = SerOutE0;

type
    string_type = String[255];
    stringPointer = pointer to string_type;

procedure WritelnWrapper(str : stringPointer);
begin
    Writeln(SerOutPC,str^);
end;

var
    text : String[20];
begin
    text := 'hier steht Text';
    WritelnWrapper(@text);
end.
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 11.07.2014 - 16:57  ·  #13
Just how I would do it :-)
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Fehler in der IN - Abfrage

 · 
Posted: 21.07.2014 - 11:15  ·  #14
Hallo Rolf,

ich möchte das eigentliche Thema noch einmal auffrischen, da es in der allgemeinen Diskussion untergegangen zu sein scheint.

Warum bekomme ich in folgender IF-Abfrage die Antwort vom ACRco, daß die Zahl 2.3 NICHT zwischen 0 und 5 liegt?
VAR
lFL : Float;
...
lFl := 2.3;
If Not (lFl In [0..5]) Then
SLIP_WriteStr('TXT|2.3 ist nicht im Bereich von 0..5');
Else
SLIP_WriteStr('TXT|2.3 ist im Bereich von 0..5');
EndIf;

--> 2.3 ist nicht im Bereich von 0..5

??

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: 21.07.2014 - 13:24  ·  #15
Hallo Michael,

das "IN" geht eigentlich nur mit ordinalen Zahlen.
Ich werde das jetzt mal nachprüfen und ggf. die Verwendung von float hier ausschliessen.
Resultat:
bei mir tuts.
Code
  lFl := 2.3;
  If lFl In [0..1] Then
    nop;
  Else
    nop;
  EndIf;
  If lFl In [0..5] Then
    nop;
  Else
    nop;
  EndIf;

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

Re: Fehler in der IN - Abfrage

 · 
Posted: 21.07.2014 - 13:27  ·  #16
Im Compiler-Handbuch haben Sie ja Float für den IN-Operator explizit eingeschlossen - und witzigerweise funktioniert die Abfrage ja korrekt, wenn man nicht das NOT davor schreibt...
  • 1
  • 2
  • 3
  • Page 2 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.03904s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI