Select case : CASE mit mehreren Werten nutzen????

Anfängerfragen zum Programmieren mit PureBasic.
ingo
Beiträge: 11
Registriert: 19.03.2005 15:23

Select case : CASE mit mehreren Werten nutzen????

Beitrag von ingo »

Hallo Leute,
ich dotor gerade am meiner Steuerung für einen I2C-Bus Adapter herum. Nun habe ich das Problem, das in einer SELECT CASE Auswertung für fünf verschiedene Werte die gleiche Befehlssequenz ablaufen soll. Nun kann man fünf CASE (wert) <Anweisungen> schreiben.
Kann man in PUREBASIC die fünf Werte auch hinter ein CASE setzen??? So wie in UNIX

Code: Alles auswählen

......CASE Wert1 | Wert2 | Wert3
<Anweisung1>
<Anweisung2>......
CASE.......
Habe in der Hilfe nichts darüber gefunden.
Ich danke allen die Mithelfen
GRUSS
INGO
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Select case : CASE mit mehreren Werten nutzen????

Beitrag von Kiffi »

> Kann man in PUREBASIC die fünf Werte auch hinter ein CASE setzen???

nein, kann man leider nicht.

> So wie in UNIX

UNIX? Was ist das denn für eine Programmiersprache? ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Code: Alles auswählen

If x = xxx Or x=yyy Or x=zzz
  ....
ElseIf x >=  3456
  ....
Else
  ....
EndIf
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
ingo
Beiträge: 11
Registriert: 19.03.2005 15:23

Beitrag von ingo »

@ Kiffi
Unix ist ein Betriebsystem (so wie Linux). Dort gibt es Schell-Scripte (ähnlich wie eine Batch-Datei unter DOS).

@ jear
Die Idee hatte ich auch, aber ich finde der Code wird dann an dieser Stelle sehr unübersichtlich. Ich habe noch keine Möglichkeit gefunden eine Codezeile umzubrechen. Also nicht so:

Code: Alles auswählen

If  EventGadgetID() = #PCF_8574_A6 Or  EventGadgetID() = #PCF_8574_A5 Or EventGadgetID() = #PCF_8574_A4.......
sondern den Code so zu schreiben:

Code: Alles auswählen

If  EventGadgetID() = #PCF_8574_A6 
    Or  EventGadgetID() = #PCF_8574_A5 
    Or EventGadgetID() = #PCF_8574_A4.......
Oder habe da was übersehen und es geht doch????
GRUSS
INGO
Ein Computer gehorcht Deinen Befehlen, nicht Deinen Absichten!
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> @ Kiffi
> Unix ist ein Betriebsystem (so wie Linux).

das ist mir bekannt.

> [Zeilenumbruch]
> Oder habe da was übersehen und es geht doch????

nein, das geht ebenfalls nicht.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Wie Kiffi schon bescheinigt hat, mehrzeilige Statements gibt es in PB noch nicht.
Wenn die Werte Deiner Konstanten #PCF_8574_A6 ... aber in Reihe sind, kannst Du mit

Code: Alles auswählen

 If EventGadgetID() >= #PCF... AND EventGadgetID()  <= #PCF... 
eine Reihe mit einer Klatsche erschlagen.

Wenn Du die Konstanten selbst festlegst, kannst Du das einfach in einer Enumeration erreichen, in der Du die zusammengehörigen Elemente entsprechend gruppierst.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
hussi
Beiträge: 70
Registriert: 19.05.2005 13:30

Beitrag von hussi »

Code: Alles auswählen

Select : EndSelect


Syntax
Select <Ausdruck1>
  Case <Ausdruck2> 
     ...
  [Case <Ausdruck3>]
     ...
  [Default] 
     ...
EndSelect 

Beschreibung

Select erlaubt eine schnelle Auswahl. Das Programm führt den <Ausdruck1> aus und behält dessen Ergebnis im Speicher. Dieses wird mit allen Werten aus den "Case <Ausdrücken>" verglichen, und wenn dieser Vergleich wahr ergibt, wird der zugehörige Programmcode ausgeführt und die Select Struktur beendet. Wenn keiner der Case Werte wahr ist, dann wird der Default Code (sofern definiert) ausgeführt. 
Benutze doch einfach den DEFAULT Wert

VG hussi
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

Für das Problem mit den mehrzeiligen Anweisungen habe ich vor kurzem ein Tool für die neue IDE geschrieben (hat nur 15 min. gedauert, deshalb sieht der Code, der an den Compiler übergeben wird, nicht sonderlich toll aus)

Hier der Source des Tools:

Code: Alles auswählen

EditorOutput$       =ProgramParameter()
ActivationCommand$  =ProgramParameter()
NewLineCommand$     =ProgramParameter()

If EditorOutput$ And ActivationCommand$ And NewLineCommand$
  
  Activated=#False
  
  If ReadFile(0, EditorOutput$)
    
    Length =Lof()
    *Buffer=AllocateMemory(Length)
    ReadData(*Buffer, Length)
    CloseFile(0)
    
  EndIf
  
  For Pos=0 To Length-1
    
    If Pos<=Length-Len(ActivationCommand$)-1
      If PeekS(*Buffer+Pos, Len(ActivationCommand$))=ActivationCommand$ : Activated!1 : EndIf
    EndIf
    
    If Activated=#True And Pos<=Length-Len(NewLineCommand$)-1
      
      If PeekW(*Buffer+Pos)=2573
        PokeW(*Buffer+Pos, 538976288)
      EndIf
      
      If PeekS(*Buffer+Pos, Len(NewLineCommand$))=NewLineCommand$
        PokeW(*Buffer+Pos, 2573)
      EndIf
      
    EndIf
    
  Next
  
  If CreateFile(0, EditorOutput$)
    
    WriteData(*Buffer, Length)
    CloseFile(0)
    
  EndIf
  
EndIf

End

Einfach zu einer EXE kompilieren und dann in den Werkzeugeinstellungen folgendes einstellen:

Kommandozeile: Pfad zur EXE

Argumente: "%COMPILEFILE" ;MLT ;;

Ereignis zum Auslösen: Vor dem Kompilieren/Starten

Warten bis zum Beenden des Werkzeugs aktivieren

Wenn alles richtig gemacht wurde, kann man den Code auch so schreiben:

Code: Alles auswählen

;MLT;;

a=Random(3)-1;;

If a=1 Or
   a=2 Or
   a=3;;
   
   Debug 1;;
   
EndIf;;
';MLT' - aktiviert bzw. deaktiviert das Tool
';;' - Zeilenumbruch
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ich würde es praktischer eher andersherum machen, sodass ein Zeilenumbruch entfernt wird. :allright:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

Batze hat geschrieben:Ich würde es praktischer eher andersherum machen, sodass ein Zeilenumbruch entfernt wird. :allright:
So funktioniert es doch auch. Ein 'CRLF' wird durch zwei Spaces ersetzt und ein ';;' durch ein 'CRLF'.
Antworten