Seite 1 von 2
Select case : CASE mit mehreren Werten nutzen????
Verfasst: 22.08.2005 12:53
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
Re: Select case : CASE mit mehreren Werten nutzen????
Verfasst: 22.08.2005 13:01
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
Verfasst: 22.08.2005 13:22
von jear
Code: Alles auswählen
If x = xxx Or x=yyy Or x=zzz
....
ElseIf x >= 3456
....
Else
....
EndIf
Verfasst: 22.08.2005 15:47
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
Verfasst: 22.08.2005 17:15
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
Verfasst: 22.08.2005 18:37
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.
Verfasst: 23.08.2005 10:57
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
Verfasst: 23.08.2005 11:05
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
Verfasst: 23.08.2005 14:52
von Batze
Ich würde es praktischer eher andersherum machen, sodass ein Zeilenumbruch entfernt wird.

Verfasst: 23.08.2005 19:53
von Spirit
Batze hat geschrieben:Ich würde es praktischer eher andersherum machen, sodass ein Zeilenumbruch entfernt wird.

So funktioniert es doch auch. Ein 'CRLF' wird durch zwei Spaces ersetzt und ein ';;' durch ein 'CRLF'.