Brauche Hilfe beim LUA lernen!!!

!!! Please ensure, that your contribution or question is placed into the relevant section !!!
Questions about rolling stock, for example, do not belong in "Questions about the Forum". Following is perhaps the right area where your question will be better looked after:
General questions to EEP , Splines, rolling stock, Structures in EEP, landscape elements, Signalling system and controlling, designers, Europe-wide EEP meetings , Gossip
Your cooperation to keep the forum clear is appreciated.
  • Guten Abend,

    bin gerade am LUA lernen! Mit einfachen Sachen habe ich kaum Probleme; OK, manchmal stehe ich auch auf dem Schlauch. Bin halt auch kein Programmierer, Ich versuche auch immer. wenn möglich ohne Hilfe aus zukommen aber jetzt benötige ich etwas Hilfe!

    Was ist an diesem Code falsch bzw. was fehlt?

    Wie bekomme ich die Namen der Wagen dynamisch in die Tabelle geschrieben?



    Liebe Grüsse



    Fussel


    EEP 14, 15, 16, HP-Laptop(technische Daten unbekannt),:ac_1:

  • Hallo Fussel ,


    Goetz hat mal eine Funktion veröffentlicht, mit der man ALLE Zugdaten in einer Tabelle speichern kann. Ich weiß nicht mehr in welchem Thread. Daher anstatt des Links hierauf, die Lua-Funktion selbst:


    Studiere sie und du hast deine Lösung!:ad_1::ap_1:

    Fried-liche Grüße:aq_1: Haltet die Ohren steif, sonst hält die Maske nicht!

    Laptop: i7-4710HQ 2,5GHz, 8GB RAM, Intel HDGraphics 4600, NVIDIA GeForce GTX860M, Windows 10 Pro 1909 64bit

    EEP: Aktuell 15.1.2 und 16.2.3_Plug-in1, HomeNos16, ModellKatalog, Modell-Explorer, Zug-Explorer, BulkInstaller, TauschManager


    Man soll keine Dummheit zweimal begehen. Die Auswahl ist schließlich groß genug.

  • Du beschreibst zwar nicht, was genau der Fehler ist (Fehlermeldung? Ergebnis anders als erwartet?), aber ich vermute mal, dass der Fehler in Zeile 14 liegt:

    LUA Source Code
    1. table.insert(Name.w1 [2])

    Ich vermute, dass du den Inhalt der Variablen w1 in die Tabelle Name einfügen willst. Das ginge so:

    LUA Source Code
    1. table.insert(Name, w1)

    Was du mit der [2] bezwecken wolltest, weiß ich leider nicht. Du kannst dir aber selbst anschauen, wie und mit welchen Parametern die Funktion table.insert genau funktioniert. Das steht nämlich (auf Englisch) im Lua Reference Manual.


    Viele Grüße

    Benny

  • ALLE Zugdaten in einer Tabelle

    sind für den Anfang vielleicht etwas zuviel. :ae_1:


    Hiermit bekommst du nur die Namen aller Elemente eines Zugverbands in eine Tabelle:



    1. Wird in Zeile 14 ausgedruckt
    2. -
    3. definiert die Funktion Zug() mit dem Argument Zugname. Gibt man den Funktionsnamen (ohne Klammern!) in einen Kontaktpunkt ein, dann ruft ein Zug, der den KP überfährt, diese Funktion auf und übergibt seinen Namen an das Funktionsargument.
    4. übergibt die Anzahl der Elemente im Zugverband Zugname an die Variable anzahl. Die Variable ist als lokale Variable deklariert und steht nur innerhalb der Funktion zur Verfügung
    5. erstellt lokal (= nur innerhalb der Funktion) eine leere Tabelle namens liste.
    6. beginnt eine Wiederholung und gibt den Zähler der Wiederholung an die Variable i. Der Zähler beginnt mit 0 und endet mit der Zahl, die in Zeile 4 gespeichert wurde. Das erste Elemente in einem Zugverband (meistens die Lok) hat die Nummer 0, deshalb muss die Wiederholung mit 0 beginnen wenn man alle Elemente haben möchte.
    7. bittet EEP um den Namen von Element Nummer i Im Zugverband Zugname und übergibt diesen Namen an eine lokale Variable namens name. Bei jedem Durchlauf der Schleife hat i eine andere Zahl. Deshalb bekommt man so nach und nach alle Elemente.
    8. fügt den in name zwischengespeicherten Namen ans Ende der Tabelle liste an. Das erste Argument der Function table.insert() ist der Name der Tabelle, das zweite ist die Information, die gespeichert werden soll. Weil die Information ans Ende angehängt werden soll, muss man keinen Tabellenplatz angeben.
    9. markiert das Ende des for ... do Blocks, der wiederholt ausgeführt wird.
    10. fasst alle durchnummerierten Elemente der Tabelle liste zu einem einzigen String zusammen. Das zweite Argument ist das Trennzeichen zwischen den Elementen. \n steht erzeugt einen Zeilenumbruch. Der String "\n" als Trennzeichen bewirkt also, dass bei der Ausgabe alle Elemente untereinander geschrieben werden. Der fertige String wird an die lokale Variable text übergeben. Diese Aktion wird nur einmal durchgeführt, denn sie steht hinter dem Wiederholungsblock.
    11. gibt den zuvor zusammengestellten Text aus. Es ist ratsam, größere Textmengen zuerst in einem einzigen String zusammenzufassen und dann diesen String komplett mit einem einzigen print() Befehl auszugeben. Das ist erheblich schneller als die Ausgabe lauter einzelner Textzeilen. Ein String kann in Lua sehr, sehr lang sein. Was auch immer man in einem Rutsch ausgeben möchte passt ganz bequem in einen einzelnen String. Die Zusammenstellung des Strings aus vielen Teilen kann Lua wesentlich schneller erledigen als die individuelle Ausgabe aller einzelnen Teile.
    12. markiert das Ende der Funktionsdefinition Zug()
    13. -
    14. löscht das Ausgabefenster und gibt den Titel aus Zeile 1 aus, gefolgt von einem Zeilenumbruch (für eine Leerzeile über der Zugliste)
    15. -
    16. definiert die Hauptfunktion, die EEP selbständig 5 mal je Sekunde aufruft
    17. gibt eine 1 an EEP zurück. Wenn EEP keine Zahl zurück bekommt, dann beendet es den Datenaustausch mit Lua. Bekommt EEP eine 0 zurück, dann läuft Lua mit eingeschränktem Funktionsumfang und ohne erneuten Aufruf der EEPMain() Funktion weiter. Jede andere (positive oder negative) Zahl führt (ohne Unterschied) zum erneuten Aufruf der EEPMain() Funktion.
    18. markiert das Ende der Funktionsdefinition EEPMain()

    "Wenn man mit seinen Anlagen nicht weiterkommen, aus welchen Grund auch immer, dann sollte man einfach mal EEP Pause machen."

    - Icke (Administrator) -

    The post was edited 5 times, last by Goetz: Bild eingefügt ().

  • Hallo,

    zunächst mal vielen Dank an alle!


    Ein ganz besonderer Dank geht an Goetz !! Es ist erstaunlich wie viel Mühe du dir gibst, uns allen unseren Fragen so zu beantworten, dass wir mit EEP und LUA immer ein Stückchen weiter kommen (Danke für deine ausführliche Beschreibung).


    Auch die Videos von dir, sind bei mir immer erste Wahl. Habe daraus schon sehr viel gelernt! Leider vergesse ich manches auch wieder,:as_1: Zum Glück kann man sie immer wieder anschauen.

    Also nochmals vielen vielen Dank!


    Fussel

    EEP 14, 15, 16, HP-Laptop(technische Daten unbekannt),:ac_1:

  • Auch ich bedanke mich für die tolle Beschreibung zur Erstellung einer Tabelle. Ich habe dieses Script für eine andere Aufgabe etwas verändert und der Versuch hat geklappt.


    Das Beispiel kommt in meine Scriptsammlung.


    Gruß


    Peter

    Betriebsystemname: Microsoft Windows 10 Pro Education

    Prozessor: AMD Ryzen 5 1600 Six-Core Processor, 3200 MHz, 6 Kern(e), 12 logische(r) Prozessor(en)

    PC:RAM 16 GB

    Grafik Karte: Name NVIDIA GeForce GTX 1060 6GB


    EEP6 mit allen Plugins und Patches
    EEP7 bis13 mit allen Patches und Plugins

    EEP 15 und EEP 16
    Modelkonverter
    PlanEx 3.1
    Home-Nostruktor 13.0
    Modellkatalog
    Bodentextur Tool



  • Der Zähler beginnt mit 0 und endet mit der Zahl, die in Zeile 4 gespeichert wurde. Das erste Elemente in einem Zugverband (meistens die Lok) hat die Nummer 0,

    Hallo Goetz ,


    in Zeile 6 deines Scripts hat sich m.E. ein kleiner Fehler eingeschlichen. Hat ein Zugverband z.B. 8 Elemente anzahl = 8 und das 1. Element die Nummer i = 0, dann hat das letzte Element die Nummer i = 7 bzw. i = anzahl - 1. Zeile 6 muss also richtig heißen:

    LUA Source Code
    1. for i = 0, anzahl - 1 do

    Fried-liche Grüße:aq_1: Haltet die Ohren steif, sonst hält die Maske nicht!

    Laptop: i7-4710HQ 2,5GHz, 8GB RAM, Intel HDGraphics 4600, NVIDIA GeForce GTX860M, Windows 10 Pro 1909 64bit

    EEP: Aktuell 15.1.2 und 16.2.3_Plug-in1, HomeNos16, ModellKatalog, Modell-Explorer, Zug-Explorer, BulkInstaller, TauschManager


    Man soll keine Dummheit zweimal begehen. Die Auswahl ist schließlich groß genug.