Sub mit Variable

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Sub mit Variable

      Hallo !

      Ich habe folgendes Problem...

      Dim Text As String *1
      Text = "A" ( oder B ....usw. )


      Hier soll nun die jeweilige Sprungmarke angesprungen werden, jenachdem wie die Variable Text eben heisst...
      ....dachte das macht man mit:

      Gosub ; Text

      doch so geht es nicht ! da tut sich garnichts !!! wie ginge das, wenn es geht ??? bitte um Hilfe !
      Danke im voraus


      <<<hier steht weiterer Code>>>

      End


      A:
      ( hier steht etwas )
      Return
      B:
      ( hier steht etwas )
      Return

      usw.
    • Es wird sich wohl nicht vermeiden lassen eine Abfrage zu treffen ähnlich : if text="A" then gosub A:
      Beim compilieren wird aus gosub a: ein call(die adresse an der A: beginnt) was fest im Flash gebrannt wird. Es dort zu ändern ist schwer umzusetzen und würde innerhalb kürzerer Zeit die Flash Speicherzelle zerstören.
    • Hallo,
      ich bin mir sicher, dass man das effizienter machen kann, als du es vorhast. Aber dafür müsste man wissen, was bei den Labels passieren soll.
      Willst du dabei bleiben, dann schau dir mal diese Möglichkeiten an
      Select case Text
      case "A": ...
      case "B": ...

      oder (verpönt)
      On Text Goto|Gosub label A,B,...

      oder auch (aber komplizierter)
      Declare Sub xxx(bylabel mylabel)
    • ja... hab ich gesehen das scheint aber nicht zu funktionieren !

      Die Helligkeitswerte werden an andere Variablen übergeben, welche nach Return zur weiteren Verarbeitung kommen....

      das hat aber mit dem eigentlichen Problem nichts zu tun !

      Es sollte eben nur einfach zu dem Label springen der so heisst wie eben die Variable " Text " .... dann wäre das mit einer Anweisung getan und ich müsste nicht für jede mögliche Variable eine If, Select ,goto, gosub oder dergl. verwenden !
    • Oder etwas wie:

      Quellcode

      1. Dim Text As String *1
      2. DIM Wert as Byte
      3. ...
      4. Text = "A" ( oder B ....usw. )
      5. Wert = ASC(Text)
      6. Wert = Wert - 65
      7. ON Wert GOSUB A, B, C
      Das finde ich nicht sooo schrecklich.

      Allerdings finde ich auch CASE recht übersichtlich.

      Oder den Buchstaben einer Sub beim Aufruf mit übergeben und innnerhalb dieser dann mit CASE verzweigen. Dann sieht die Hauptschleife zumindest ordentlich aus.Zu Deinem ursprünglichen Ansatz musst Du Dich einmal in den Compiler hineinversetzen: Die Label speichert der Compiler als Adressen. Für den String reserviert der Compiler Speicher. Zur Laufzeit findet das Programm dann zum Beispiel die Darstellung des „A“ an der für den String reservierten Speicherzelle. Und nun? Nun liest das Programm so etwas wie GOSUB „A“. Wie soll das arme Programm nun verstehen, was es damit anfangen soll? Von diesem „A“ darauf zu kommen, dass Du gerne möchtest, dass in der Tabelle der Labeladressen nachgeguckt werden soll, würde an Gedankenlesen grenzen. Da würde ich als Compiler oder spätestens als Programm sagen: Hinter GOSUB soll gefälligst eine Sprungadresse folgen. GOSUB A zum Beispiel. Und nicht die Variable eines Strings.
    • @absolute beginner ich versteh' grad' nicht, was es für dich einfacher mach 'text="a"' zuzuweisen und dann, wenn es ginge, 'gosub "text"', als gleich, statt dem Zuweisen von text, gosub a. Sind deine Buchstaben Steuerzeichen? Wenn ja, ist die Anzahl der Parameter, die gesteuert werden immer gleich, dann könntest du auch eine data-Tabelle anlegen und der Einsprung in diese Tabelle kann aus dem Buchstaben errechnet werden.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------