[Lua] Eine Möglichkeit um Tag-Texte in Rollmaterialien gemeinsam zu nutzen

Achte bitte darauf, dass Du mit deinem Thema bzw. mit deiner Frage im richtigen Bereich bist.
Die Bereiche sind: Einstellungen im Forum, EEP aktuell ab EEP7 , Splines, Rollmaterialien, Immobilien, Landschaftselemente, Signale und Schaltung, Anlagenvorstellungen, Schnappschüsse Konstrukteure, EEP Treffen , Laberecke, Online - Handbuch EEP Vielen Dank für die Unterstützung das Forum übersichtlich zu halten.
Bilder/Fotos aus dem Internet sind nur als Link gestattet. Eigene Fotos, also Fotos aus dem realen Leben, sind erstens mit Eigenes Bild als Quellenangabe zu kennzeichnen und zweitens nur als Dateianhang im Beitrag zulässig. Bilder ohne Quellenangaben und Bilder dessen Quelle das Internet wie z. B. Google ist, werden gelöscht.
  • Hallo zusammen,

    ich habe im Rahmen meiner Lua-Bibliothek überlegt: Wie könnte man allgemeine Informationen in den Tag-Texten ablegen, ohne dass sich mehrere Nutzer und Bibliotheken ins Gehege kommen.

    In meinem Beispiel möchte ich die Informationen Ziel (Destination) und Linie (Line) im Zug hinterlegen.

    In Lua sieht das dann so aus:

    Lua
    local train = Train.forName("#Straßenbahn 1")  -- Ich hole mir den Zug
    train:setDestination("Hauptbahnhof")           -- Ich überschreibe das Fahrziel für den Zug
    train:setLine("10")                            -- Ich überschreibe die Linie für den Zug
    
    -- An anderer Stelle (z.B. in einer Funktion für Kontaktpunkte)
    local train = Train.forName(Zugname)          -- Ich hole mir den Zug
    local destination = train:getDestination()    -- Ich lese das Fahrziel aus
    local line = train:getLine()                  -- Ich lese die Linie aus

    Im Hintergrund passiert einiges an dieser Stelle:

    • Jedes einzelne Rollmaterial bekommt einen mit EEPRollingStockSetTagText einen zugewiesen, der die einzelnen Daten nach dem Prinzip "Schlüssel=Wert" erhält.
      Der Schlüssel für Destination ist "d", der für Line ist "l", so steht dann im Tag-Text "d=Hauptbahnhof,l=10".
      Es wird eine Fehlermeldung geworfen, wenn der durch die Listenverkettung entstehende Tag-Text mehr als 1024 Zeichen ergibt.
    • Das Prinzip kann beliebig erweitert werden. Der Vorteil ist, dass man mehrere Werte gleichzeitig speichern kann und nicht nur einen einzelnen Text-Werte.
    • Trennzeichen sind derzeit "=" und "," - beide dürfen weder im Schlüssel, noch im Wert vorkommen.
    • Der Aufruf von Train.forName("#Straßenbahn 1") macht auch noch einiges:
      • Er lädt alle Werte vorhandenen Werte, damit kann ich z.B. auch folgendes machen:
        • Ziel abfragen: Train.forName("#Straßenbahn 1"):getDestination()
        • Linie abfragen: Train.forName("#Straßenbahn 1"):getLine()

    Dieser Code wird Teil der nächsten Version meiner Lua-Bibliothek und ist vermutlich eine Voraussetzung für die Anzeige ankommender Fahrzeuge in den Haltestellen

    Wenn jeder seine Tags im Rollmaterial so ablegen würde, dann gäbe es keine Konflikte mit mehreren Werten im Rollmaterial, vorausgesetzt, man kann sich auf gemeinsame Werte für die Schlüssel einigen (und die resultierenden Tag-Texte sind kleiner als 1024).

    Was meint Ihr?

    Viele Grüße,

    Andreas_Kreuz.

    Webseite: Lua-Bibliothek für EEP (mit Tutorials)

    Mein Rechner

    EEP: Version 17 - PC: AMD Ryzen 5800X, 32 GB RAM, NVidia Geforce GTX 1080 Ti, Windows 11

    Einmal editiert, zuletzt von Andreas_Kreuz (8. Juli 2020 um 17:46)

  • Die Idee TagTexte mit mehreren Schlüsselwörtern und Werten zu hinterlegen hatte ich bereits auch, eine Inspiration waren und sind für mich die von cetz vorgestellten Tutorials worauf ich auch mit dem Programmierstil ein neues Modul auf Basis von Persistence geschrieben habe mit dem Unterschied das nicht Slots sondern TagTexte der Rollmatierialien verwendet werden und die eine und andere Funktion für Kontaktpunkt.

    Theoretisch unterscheiden sich unsere Funktionen nicht viel, es wäre schön wenn sich hier eine Lösung herauskristallisiert die später ähnlich wie table.insert(..) aufrufen lässt, dieses sollte als Modul in deiner Lösung eingebaut sein aber auch unabhängig verwendbar um nicht an Bibliotheken gebunden zu sein die man für das erste nicht braucht.

    Was ich nur Fahrlässig finde ist wenn ich mich von gewissen Zeichen begrenzen muss, das ich doch etwas zerschieße und nicht das ausgeliefert bekomme was ich möchte.

    Ansonsten sehe ich erstmal in deiner Lösung den Vorteil der Zeicheneinsparung: Es begrenzt sich ausschließlich auf SchlüsselwortTrennerWertTrenner - gegenüber einer Tabelle spart es einiges an Zeichen wenn ich an die Klammern bei den Schlüsselwörtern denke. Andererseits würde mir dadurch etwas fehlen was bei Tabellen funktioniert?

    Viele Grüße,
    Damian Rutkowski

    Acer Aspire 5750G, Intel® Core™ i5-2430M 2.4GHz with Turbo Boost up to 3.0GHz, NVIDIA® GeForce® GT 540M, Up to 4095 MB TurboCache™, 8 GB DDR3 Memory, 8 GB DDR3 Memory
    EEP 6, EEP 16 mit allen Updates, Patches und Plug-Ins (stets aktuell gehalten)

  • Wenn jeder seine Tags im Rollmaterial so ablegen würde, dann gäbe es keine Konflikte mit mehreren Werten im Rollmaterial, vorausgesetzt, man kann sich auf gemeinsame Werte für die Schlüssel einigen (und die resultierenden Tag-Texte sind kleiner als 1024).

    um an dieses Vorhaben anzukommen sollte die Lösung ausgetüftelt und am besten mit so wenig Hindernissen wie möglich verbunden sein - wer weiß ob es dann nicht so gut in Verwendung kommt wie Benny (BH2)s Einzeiler :ae_1:

    Viele Grüße,
    Damian Rutkowski

    Acer Aspire 5750G, Intel® Core™ i5-2430M 2.4GHz with Turbo Boost up to 3.0GHz, NVIDIA® GeForce® GT 540M, Up to 4095 MB TurboCache™, 8 GB DDR3 Memory, 8 GB DDR3 Memory
    EEP 6, EEP 16 mit allen Updates, Patches und Plug-Ins (stets aktuell gehalten)

  • Da wird wohl eine Entwicklerkonferenz nötig!:aa_1:

    EEP 15, EEP 17

    ASUS Gaming Notebook ROG Strix G814JV, 1TB + 2 TB SSD, RTX 4060, 18 ", Win11 Home,
    AMD Phenom II X6 1070T 3GHz, 16 GB Ram, Win 10Home, ASUS Matrix-HD7970-P-3GD5 Radeon 3GB, 2x27" Asus

  • Hallo,

    mir fällt noch eine wichtige Erweiterung ein:

    Eigentlich will man ja nicht nur die Werte für einen ganzen Zug setzen, sondern auch für einzelne Rollmaterialien. Somit müsste es auch Funktionen geben wie:

    Lua
    RollingStock.forName("GT4 Serie 2 (1) Wagen A"):setValue("nr", "0815") --> Setzt den Key "nr" des Rollmaterials auf "0185"
    RollingStock.forName("GT4 Serie 2 (1) Wagen A"):getValue("nr")         --> Gibt "0815" zurück

    Die Werte werden zusätzlich zu den Werten des Zuges im Rollmaterial gespeichert, so dass man im Rollmaterial auch die Werte des ganzen Zuges zur Verfügung hat.

    Durch die allgemeine Funktion RollingStock:setValue(key, value) und RollingStock:getValue(key) kann man beliebige Werte setzen und wieder auslesen.

    Damian Rutkowski im Grund ist das die Entsprechung zu cetz Funktionalität zum Ablegen von Tabellen (allerdings in reiner String-Form, so dass die Daten etwas kompakter sind; mit den Nachteilen bei den verwendeten Zeichen).

    kynomane wir brauchen zumindest eine "gemeinsame-Nutzung-von-Tags-Konferenz" :aa_1: - Diese muss den Inhalt der Tag-Texte "harmonisieren".

    Viele Grüße,

    Andreas_Kreuz.

    Webseite: Lua-Bibliothek für EEP (mit Tutorials)

    Mein Rechner

    EEP: Version 17 - PC: AMD Ryzen 5800X, 32 GB RAM, NVidia Geforce GTX 1080 Ti, Windows 11

  • Hallo,

    hier noch mal als grafische Ansicht: Ein Zug "#train" hat drei Rollmaterialien "rollingStock1", "rollingStock2" und "rollingStock3".

    Der grüne Bereich links zeigt den Lua-Code zum Setzen der Werte im Zug. Der rechte Bereich stellt den Inhalt der Tag-Texte der Rollmaterialien 1-3 dar.

    Der blaue Bereich links zeigt den Lua-Code zum Setzen der Werte im Rollmaterial. Der rechte Bereich stellt den Inhalt der Tag-Texte der Rollmaterialien 1-3 dar.

    Jedes Rollmaterial enthält alle Werte des Zuges (grün), sowie seine eigenen Werte (blau), d.h. die Tags welche nur für das Rollmaterial gesetzt wurden.

    Wenn das gemeinsam genutzt werden soll, dann ist folgendes erforderlich:

    1. Einigung auf die Schlüssel, damit keine doppelten Schlüssel vorkommen
    2. Einigung auf die Codierung als String (Vorteil: Platzsparender als Tabellen zu kodieren)
    3. Einigung auf die Trennzeichen (hier "=" und ",") --> Ggf. andere Zeichen, da die Trenner selbst in den Werten nicht vorkommen dürfen.

    Viele Grüße,

    Andreas_Kreuz.

    Webseite: Lua-Bibliothek für EEP (mit Tutorials)

    Mein Rechner

    EEP: Version 17 - PC: AMD Ryzen 5800X, 32 GB RAM, NVidia Geforce GTX 1080 Ti, Windows 11

  • Hallo zusammen,

    in EEP-Web könnte der Editor für den Zug so aussehen:

    Ein Klick auf den blauen Stift bearbeitet den Wert im Tag.

    Ein Klick auf den roten Papierkorb löscht den Wert aus dem Tag.

    Viele Grüße,

    Andreas_Kreuz.

    Webseite: Lua-Bibliothek für EEP (mit Tutorials)

    Mein Rechner

    EEP: Version 17 - PC: AMD Ryzen 5800X, 32 GB RAM, NVidia Geforce GTX 1080 Ti, Windows 11

  • Danke.

    Das ist der erste Entwurf. Muss mir noch Gedanken über die Lua-Anbindung und die zu übertragenden Daten machen.
    Ich hoffe, wenn es fertig ist, wird es einigen von Nutzen sein.

    Wenn Ihr noch Ideen oder Bedenken habt, wäre jetzt ein guter Zeitpunkt diese zu äußern.

    Viele Grüße,

    Andreas_Kreuz.

    Webseite: Lua-Bibliothek für EEP (mit Tutorials)

    Mein Rechner

    EEP: Version 17 - PC: AMD Ryzen 5800X, 32 GB RAM, NVidia Geforce GTX 1080 Ti, Windows 11

  • eigentlich schon traurig ...... das keine wirkliche resonant kommt ob wohl hier was großes entsteht ......

    ohne es böse zu nehmen glaube der beste weg ist man mach und gibt ab und an eine Info aber sonst macht man einfach sein Ding was sehr schade ist ......

    von meiner Seite weist du hast du meine unterstützen und stehe mit Rat und tat zur Seite

    Mfg MeckerKopf

  • Hallo Andreas,

    die Tag-Texte sehe ich wie die ‘Elektronischen Beförderungspapiere‘ für Güterwagen mit allen wichtigen Infos.

    Wenn jetzt auch noch die Tag-Texte aus abgekoppelten Rollmaterialien auslesbar wären, würde ich auch mein Projekt 'Cargo Management' weiterentwickeln.

    In diesem Zusammenhang ist auch die Einbindung einer Datenbankanwendung vorstellbar.

    Mit 'nem bähnlesmäßigen Gruß,
    Michael

    EEP 17.2_1,2

  • Hallo,

    ich werde das Projekt sowieso fortführen. Wenn sich niemand meldet, dann so, wie ich es mir gedacht hatte. :ae_1:

    Das Ganze wird aber noch eine Weile in Anspruch nehmen, auch weil die Urlaubszeit vor der Tür steht.

    Was ich zwischendurch noch überlegt hatte: Um die Werte für "RollingStock" zu unterscheiden, bekommen deren Schlüsseln ein "x" vorangestellt (xw=Wagen 1,xc=Mein Kommentar), die vom Zug bleiben so kurz wie möglich (c=Mein Kommentar Zug). So kann man beides beim Auslesen einfach unterscheiden und muss nicht raten, ob es zum Zug oder zum RollingStock gehört. Zwei Methoden setComment(text) und getComment() werde ich auch noch hinzufügen.

    Michael_W: Ich habe vor, die Sachen auch aus abgekoppelten Rollmaterialien auszulesen. Bis der Editor kommen wird, ist aber bestimmt Herbst.

    Viele Grüße,

    Andreas_Kreuz.

    P.S. Die Likes unter den Beiträgen zeigen mir, dass grundsätzliches Interesse vorhanden ist.

    Webseite: Lua-Bibliothek für EEP (mit Tutorials)

    Mein Rechner

    EEP: Version 17 - PC: AMD Ryzen 5800X, 32 GB RAM, NVidia Geforce GTX 1080 Ti, Windows 11

    Einmal editiert, zuletzt von Andreas_Kreuz (13. Juli 2020 um 22:34)

  • Hallo Andreas,

    das hört sich sehr gut an ! Dem Motto folgend "Rentner denken in Etappen", kann ich mir weiter über mein Projekt Gedanken machen. Dafür hat der Editor auch noch genügend Zeit.

    Dann wünsch ich erst mal einen erholsamen Urlaub ...

    Mit 'nem bähnlesmäßigen Gruß,
    Michael

    EEP 17.2_1,2

  • Was ich zwischendurch noch überlegt hatte: Um die Werte für "RollingStock" zu unterscheiden, bekommen deren Schlüsseln ein "x" vorangestellt (xw=Wagen 1,xc=Mein Kommentar), die vom Zug bleiben so kurz wie möglich (c=Mein Kommentar Zug). So kann man beides beim Auslesen einfach unterscheiden und muss nicht raten, ob es zum Zug oder zum RollingStock gehört. Zwei Methoden setComment(text) und getComment() werde ich auch noch hinzufügen.

    Hi Andreas,

    Jetzt muss ich Dich doch mal fragen, warum Du nun solche nicht erkennbare Kürzel verwendest...

    nun brauchst Du "x" als Platzhalter für "RollingStock" warum den nur. Entweder plädierst Du für unnötige Kürzel für die Formate und Argumentierst für eindeutige Bezeichner und wählst das "x", was in der Math. eine Unbekannte bez. ein zu berechnenden Begriff steht, in der Binären Logik für einen Boolesch-Wert.

    Warum nur kürzt Du nicht mit zB. mit RS, was wenigstens dem Begriff der dahinter steht entspricht?

    Das "x" wird in kurzer Zeit keinen Bezug zum Sinn mehr haben, und was nun "c" hier sagen soll weisst nur Du.

    Gruss Marino

    EEP-15.1 [x64] Patch 2 / EEP-17 in Installation

    hat ein klein wenig Ahnung von System-Programmierung :bn_1:

    https://abload.de/img/zglbrckqhkzh.jpg

    Windows 10 Pro 21H2 64-Bit V -19044

    HP Z2230 Tower-Workstation Intel CPU E3-1225v3 @ 3.2 GHz

    HD1..4 je 2GB Micron 133MHz / RAM 8GB

    Monitor: Samsung 33-inch 2*HDMI Intel HD Graphics P4600

    Windows 11 V21H2 64-Bit

    HP OMEN 40L Desktop-PC GT21 - AMD Ryzen 7 5700G

    RAM 16GB - Speicher 2*8GByt Kingston 3.2GHz

    Video NVIDIA GeForce RTX 3060 TI - Monitor: HP M34d WQHD

  • Hallo Marino,

    Jetzt muss ich Dich doch mal fragen, warum Du nun solche nicht erkennbare Kürzel verwendest...

    Sehr gute Frage!

    Die Antwort ist: Die Tag-Texte sollen so kurz wie nur möglich sein, so dass man von den 1024 Zeichen möglichst viele für die Inhalte und nicht für die Schlüssel nutzen kann.

    Arbeiten wird man bei den Aufrufen NICHT mit diesen Schlüsseln, sondern mit benannten Variablen:

    Train:setValue(TagKey.Line, „10“) oder Train:setValue(TagKey.Comment, „Mein Kommentar) oder RollingStock:setValue(TagKey.Comment, „Mein Kommentar“). Mit dem x oder c wird dann keiner in Berührung kommen. Man muss nur wissen, wenn man selber solche „TagKey“s anlegt, dass diese idealerweise aus einzelnen Buchstaben bestehen und nicht doppelt vorkommen dürfen.

    TagKey ist einfach nur eine Tabelle: TagKey = { Comment = „c“, Line=„l“, ...}

    Das x kommt automatisch vor den Key bei RollingStock und kein TagKey sollte mit x beginnen.

    Viele Grüße,

    Andreas_Kreuz

    Webseite: Lua-Bibliothek für EEP (mit Tutorials)

    Mein Rechner

    EEP: Version 17 - PC: AMD Ryzen 5800X, 32 GB RAM, NVidia Geforce GTX 1080 Ti, Windows 11

  • Ich sehe Ein-Buchstaben-Keys etwas kritisch, weil so die kurzen Schlüssel mit ziemlich spezifischen Dingen belegt werden (ein normaler PKW oder Güterzug braucht zum Beispiel keine Linie). Aber ich verstehe natürlich auch dein Ziel, die Schlüssel möglichst kurz zu halten.

    Um nicht alle Schlüssel zu "blockieren", die mit x beginnen*, wäre evtl. ein anderer Prefix besser, z.B. _, ! oder irgend ein anderes Sonderzeichen. # würde die "Tradition der Zugverbandsnamen" aufgreifen.

    Viele Grüße

    Benny

    * auch wenn ich zugeben muss, dass mir gerade kein vernünftiger Schlüssel einfällt, der mit x beginnt.

  • Hallo zusammen,

    Vielen Dank für die bisherigen Fragen und Vorschläge. Sie helfen mir persönlich ungemein dabei, die Idee weiterzuentwickeln.

    Das „x“ als Marker aber auch die Tabellentrenner mit „=„ und Komma werde ich noch mal überdenken.

    Ich freue mich auf weitere Fragen und Ideen.

    Viele Grüße,

    Andreas_Kreuz.

    Webseite: Lua-Bibliothek für EEP (mit Tutorials)

    Mein Rechner

    EEP: Version 17 - PC: AMD Ryzen 5800X, 32 GB RAM, NVidia Geforce GTX 1080 Ti, Windows 11

    Einmal editiert, zuletzt von Andreas_Kreuz (14. Juli 2020 um 12:44)