DO CASE über Eval(), oder FOR NEXT?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

DO CASE über Eval(), oder FOR NEXT?

Beitrag von Manfred »

Hallo,

ich habe mal wieder eine tolle Frage parat.

Code: Alles auswählen

          LOCAL aPromptArray := {;
                                 {"Menue1","menue1()","Menue1"},;
                                 {"Menue2","menue2()","Menue2"},;
                                 {"Menue3","menue3()","Menue3"},;
                                 {"Menue4","menue4()","Menue4"},;
                                 {"Menue5","menue5()","Menue5"},;
                                 {"Ende"    ,"AppQuit()" ,"Programmende"};
                                }

          ASort(aPromptArray,,LEN(aPromptArray)-1,{|aX,aY| aX[1] < aY[1]}) // sortieren, damit die alphabetische Reihenfolge bleibt, aber ohne Programmende, deshalb (-1)

          DO WHILE .T.
             nY := 4
             nX := MAXCOL()/2-4
             nAuswahl := LEN(aPromptArray)
             FOR nI := 1 TO nAuswahl
                 IF nI < nAuswahl                        // damit das letzte Prompt (Ende) kein Zeichen davor bekommt
                    IF nI > 9
                       cZahl := CHR(nI+55) + ")"                         // hier werden große Buchstaben generiert
                    ELSE
                       cZahl := CHR(nI+48) + ")"                         // Zahlen von 1-9
                    ENDIF
                 ELSE
                    cZahl := ""
                 ENDIF
                 @ nY,nX PROMPT cZahl + aPromptArray[nI,1] MESSAGE aPromptArray[nI,3]
                 nY += 2
             NEXT
             MENU TO nAuswahl
             DO CASE
                   CASE nAuswahl = 1
                            &(aPromptArray[1,2])
                   CASE nAuswahl = 2
                            &(aPromptArray[2,2])

                   CASE nAuswahl = 3
                            &(aPromptArray[3,2])

                   CASE nAuswahl = 4
                            &(aPromptArray[4,2])

                   CASE nAuswahl = 5
                            &(aPromptArray[5,2])

             ENDCASE
          ENDDO .T.
 
Gibt es irgendeine Möglichkeit die DO CASE Anweisung auch über eine Schleife mit dem Array zu verbinden? Ich habe ein paar Dinge ausprobiert, aber irgendwie will es mir nicht gelingen. Es wäre ja schön, wenn man das Array irgendwie einbinden könnte, sonst müßte man ja vorher immer wissen, wie groß das Array ist. Es gibt doch Menues, die aus einer DB gefüttert werden können? Ich finde auch auf die Schnelle nichts in den Beispielen..
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
warum machst Du nicht einfach:

Code: Alles auswählen

&(aPromptArray[nAuswahl,2])
statt Deiner DO CASE-Konstruktion??

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

hm, statt der Zahl die Var nAuswahl, das stimmt, da habe ich mal wieder nicht dran gedacht. War mal wieder zu einfach, aber damit erschlage ich doch nicht die ganzen CASES, oder?

Das würde ich jetzt nicht verstehen, wie das klappen sollte. Oder wird statt der Cases da einfach nur das Macro in einer Schleife da stehen?

Mal testen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

:banghead:
:banghead:
:banghead:
:banghead:
:banghead:
Verflixt,

Schande über mich und Asche auf mein Haupt.

Danke MArtin, das war es. Irgendwie habe ich es nicht mit dem Denken.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Manfred hat geschrieben::banghead:
:banghead:
:banghead:
:banghead:
:banghead:
Aua - ich hoffe, Du hast genug Kopfschmerzmittel :?:
:D

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,,

diese Frage von mir, ist mir jetzt im nachhinein so peinlich, dass ich schon fast darum bitten möchte den Thread zu löschen.....

Aber vielleicht gibt es ja noch andere, die daran partizipieren, weil sie sich vielleicht nicht getraut haben so eine blöde Frage zu stellen, wie ich es manchmal mache.

Das war nun wirklich eine simple Lösung des Falles und ich habe es nicht gesehen, weil ich DO CASE so fest im Kopf mit PROMPT verankert hatte..

So was nennt man flexibel wie ein Atombunker....

:roll:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Du kannst natürlich gerne alle Deine Postings in diesem Thread löschen - aber es wäre doch schade drum :wink:
Ich finde es gut und sehe es genauso wie Du!! Dadurch werden unter Umständen auch andere Leute mutig genug, Fragen zu stellen, die ihnen eigentlich peinlich sind - aber die Frage, auch wenn sie peinlich für Dich gewesen sein sollte, war doch sinnvoll! Dein Knoten ist doch jetzt geplatzt und somit brauchst Du Dich doch auch nicht schämen, oder?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

danke für Deinen Trost.

Langsam komme ich mir aber vor wie ein Schiff, das hat auch jede Menge Knoten, nur das es pro Knoten schneller wird und ich langsamer. ;-)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Nun, dafür bekommst Du aber schneller Sterne :-)

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

:D \:D/ =D> :headbang: :happy6: :wav:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

nur um Sicher zu sein, kannst du noch vorher abfragen ob

nAuswahl <= len(aPromptArray)

ist, falls aPromptArray nicht automatisch durch die Generierung des Menüs als Obergrenze dient.

Und auch wir haben manchmal ein Brett vor dem Kopf (zumindest ich) :D
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

na gut, weil es so schön war und ich im Moment absolut Panne im Kopf bin, hier gleich noch eine Frage hintendran:

oben steht im 2 Element die Funktion, die ausgeführt werden soll.

Wenn ich jetzt stattdessen EXIT reinschreibe um die Do While Schleife zu verlassen, kommt die Meldung:

------------------------------------------------------------------------------
oError:args :
-> NIL
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Unbekannte Variable
oError:filename :
oError:genCode : 22
oError:operation : EXIT
oError:osCode : 0
oError:severity : 2
oError:subCode : 2000
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
------------------------------------------------------------------------------

Ich komme nicht drauf.....

Ich schätze es hängt mit dem Makro zusammen..
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

er versucht 'Exit' als Variable zu interpretieren, was natürlich nicht geht.

Mach doch eine Unterscheidung

Code: Alles auswählen

if aPromptArray[nAuswahl,2] = NIL
   exit
else
   &(aPromptArray[nAuswahl,2])
endif
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi,

die einfachsten Rezepte sind immer noch die besten.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

sag ich doch :D
Gruß
Hubert
Antworten