jloos Geschrieben 18. November 2021 Geschrieben 18. November 2021 Hallo, kann ich eine umfangreiche Tabelle auslesen, zwischenspeichern und wieder einlesen? Grund: Wenn ich Fahrstraßen verändere, auch wenn es nur das versetzen eines Gleiskontaktes ist, dann wird die Fahrstraße ungültig. Ich muss sie neu festlegen. Meine Fahrstraße ist aber in einer Tabelle hinterlegt, um aus der Abfragestelle und der Lok-Nr. die nächste Fahrstraße zu bestimmen. Diese Datenbank ist schon sehr umfangreich. Eine Fahrstraße kann 20 mal in der Datenbank stehen, die ich alle wieder von Hand nachpflegen muss. Ich würde mir gerne die Arbeit ersparen und die Tabelle sichern, bevor ich Änderungen an den Fahrstraßen vornehme um sie hinterher wieder einzuspielen. Ein kleines Lua-Script vielleicht? Es handelt sich um die Anlage, die ich hier vorgestellt habe: https://community.3d-modellbahn.de/applications/core/interface/file/attachment.php?id=55119 Gruß Jürgen
Goetz Geschrieben 19. November 2021 Geschrieben 19. November 2021 (bearbeitet) vor 9 Stunden schrieb jloos: Ein kleines Lua-Script vielleicht? Hallo Jürgen, um über alle Elemente einer Tabelle zu iterieren, gibt es in Lua die Schleife for k, v in pairs(t) do k und v können beliebige Variablennamen sein. Die beiden Buchstaben weisen darauf hin, dass die erste Variable den key (= Bezeichner oder Index) der Zelle erhält und die zweite Variable den value (= Wert oder Inhalt). Beatles = {"John", "Paul", "George", "Ringo"} for platz, inhalt in pairs(Beatles) do print("an Platz "..platz.." steht: "..inhalt) end Beachte bitte, dass in pairs() die Tabelle nicht sortiert durchläuft! Dafür findet es aber alles, was in der Tabelle steht, egal ob die Zellen durchnummeriert sind oder Namen haben. Für das sortierte Auslesen einer Tabelle mit lückenlos durchnummerierten Plätzen (sprich: iterable table) gibt es in ipairs(). Das i vor pairs weist auf iterable hin. Wenn du in der grafischen EV eine Wiederholung einsetzt und dann in Lua umwandelst, findest du im Code diese in pairs() Methode. Um etwas in eine durchnummerierte Tabelle einzufügen, gibt es die Methode table.insert(table, [index,] value). Viele Grüße Götz Nachtrag: Nach einem flüchtigen Blick auf deine Anlage noch ein wichtiger Hinweis. Lua unterscheidet nicht zwischen Listen und Tabellen. Man kann sogar beides vermischt in einer Tabelle haben. Aber das 3D-Modellbahn Studio unterscheidet beides ganz klar! Weil sein Code nicht auf Lua basiert. Du hast deine Fahrstraßen in einer Tabelle gespeichert. Das erkennt man sofort daran, dass in der Liste nach Platz 1 der Platz 10 folgt. Diese Zahlen sind bei einer Tabelle Bezeichner. Also Strings und keine Nummern! Und sie werden somit auch unter Lua wie Bezeichner behandelt. Besser wäre, du würdest die Fahrstraßen in einer Liste ablegen. Bearbeitet 19. November 2021 von Goetz Ergänzungen
jloos Geschrieben 19. November 2021 Autor Geschrieben 19. November 2021 vor 29 Minuten schrieb Goetz: Besser wäre, du würdest die Fahrstraßen in einer Liste ablegen. Oh guter Hinweis. Ich fange grade eine neue Anlage an, die erste war nur Übung. Dann werde ich das gleich berücksichtigen. Wenn ich wieder eine gut gefüllte Datenbank habe, werde ich wohl noch mal auf das Auslesen zurück kommen :-) Danke Goetz Gruß Jürgen
Neo Geschrieben 19. November 2021 Geschrieben 19. November 2021 Hallo, vor 9 Stunden schrieb jloos: Ich muss sie neu festlegen. wie gehst du hier vor? Wenn du nur die Wegpunkte aktualisierst, bleiben die interne ID der Fahrstraße erhalten und somit auch alle Referenzen. Nur wenn du die Fahrstraße löschst und eine neue erstellst, musst du auch Referenzen aktualisieren. Viele Grüße, Neo
jloos Geschrieben 19. November 2021 Autor Geschrieben 19. November 2021 vor 14 Minuten schrieb Neo: Wenn du nur die Wegpunkte aktualisierst, bleiben die interne ID der Fahrstraße erhalten wenn ich Beginn oder Ende der Fahrstraße durch Verschieben des Signals ändere, wird die Fahrstraße ungültig. Die Aufforderung, aktualisieren sie die Wegpunkte verstehe ich nicht. Was muß ich tun um die Wegpunkte zu aktualisieren? Gruß Jürgen
Goetz Geschrieben 19. November 2021 Geschrieben 19. November 2021 (bearbeitet) vor 3 Minuten schrieb jloos: Was muß ich tun um die Wegpunkte zu aktualisieren? Klick auf das Stift Icon. Das führt dich in das Menü, in dem du die Wegpunkte angibst. Dort klickst du einfach auf "Übernehmen" Bearbeitet 19. November 2021 von Goetz Bild hinzugefügt
jloos Geschrieben 19. November 2021 Autor Geschrieben 19. November 2021 vor einer Stunde schrieb Goetz: Besser wäre, du würdest die Fahrstraßen in einer Liste ablegen. meine Abfrage ist ja die Variable "AbfragestellenNr." im Gleiskontakt und als Indes die Variable "Lok-Nr." aus der Lok. Die Abfragestelle ist die Tabelle, in dieser suche ich dann als Index die Lok-Nr. Bei einer Liste könnte ich keine Lok-Nr. abfragen, denn es kommen ja nicht alle Loks an der Abfragestelle vorbei. Sonst müsste ich zu jeder Abfragestelle alle Loknummern eintragen und nur die tatsächlich verwendeten Lok-Nr. mit der Fahrstrasse belegen. vor 17 Minuten schrieb Goetz: Das führt dich in das Menü, in dem du die Wegpunkte angibst. Dort klickst du einfach auf "Übernehmen" ja, das funktioniert, danke Gruß Jürgen
Goetz Geschrieben 19. November 2021 Geschrieben 19. November 2021 vor einer Stunde schrieb jloos: meine Abfrage ist ja die Variable "AbfragestellenNr." im Gleiskontakt und als Indes die Variable "Lok-Nr." aus der Lok. Dann ist die Tabelle mit den Nummern als Bezeichner der richtige Weg. Tut mir leid, Jürgen ... so im Detail hatte ich deine Anlage nicht studiert. Gruß Götz
jloos Geschrieben 26. November 2021 Autor Geschrieben 26. November 2021 Hallo, ich komme noch mal auf das Thema Datenbank anlegen zurück. Dafür habe ich ein Beispiel angehängt. Für die untere Gleistrecke habe ich die Tabelle Fahrstraße mit der Abfragestelle "01" als Tabelle und der Lok-Nr "05" vom Typ Fahrstraße mit der Fahrstraße 01.11 per EV angelegt. Nun habe ich aber sehr viele Fahrstraßen mit 20 Loks. Alle Fahrstraßen sind angelegt, jetzt muss ich nur die Datenbank anlegen, das möchte ich per Tool machen. Dafür habe ich hier im Beispiel für die obere Gleisstrecke ein Ereignis "Schalter wird betätigt" angelegt. Doch es legt mir die Datenbank nicht so an, wie es sein soll. Ich stelle mir vor, das per Lua zu machen, indem ich nur die Daten austausche. Was mache ich falsch? Danke für Eure Hilfe Jürgen Datenbank per EV.mbp
Goetz Geschrieben 26. November 2021 Geschrieben 26. November 2021 vor 35 Minuten schrieb jloos: Was mache ich falsch? Der mittlere der drei Befehle ist falsch. Der speichert "12" als Text in deiner Tabelle. Schmeiß den raus! Die beiden anderen Befehle sind alles, was du brauchst. Und sie tun, was sie sollen.
jloos Geschrieben 26. November 2021 Autor Geschrieben 26. November 2021 Super, danke Goetz Gruß Jürgen
jloos Geschrieben 7. Dezember 2021 Autor Geschrieben 7. Dezember 2021 Am 19.11.2021 um 08:13 schrieb Goetz: Hallo Jürgen, um über alle Elemente einer Tabelle zu iterieren, gibt es in Lua die Schleife for k, v in pairs(t) do k und v können beliebige Variablennamen sein. Die beiden Buchstaben weisen darauf hin, dass die erste Variable den key (= Bezeichner oder Index) der Zelle erhält und die zweite Variable den value (= Wert oder Inhalt). Hallo Götz, ich bin inzwischen in meinen Daten verloren. Meine Fahrstraßendatenbank hat inzwischen 41 Tabellen mit insgesamt 207 Fahrstraßeneinträgen. Ich habe mich immer bemüht den aktuellen Stand in einer Exceltabelle zu dokumentieren. Doch das läuft immer wieder auseinander :-( Ein nettes Tool wäre, solch eine Datenbank vollständig im csv-Format ausgeben zu können um damit in Excel oder anderen Programmen zu arbeiten. Ich kann leider kein Lua, deshalb komme ich auch mit den Angaben im Zitat nicht zurecht. Vielleicht könntest Du mir mal ein Beispiel programmieren, basierend auf meiner eingestellten Anlage. Ich würde mich darüber sehr freuen, schöne Adventstage wünsche ich Allen Gruß Jürgen
Goetz Geschrieben 7. Dezember 2021 Geschrieben 7. Dezember 2021 vor 14 Minuten schrieb jloos: Ich kann leider kein Lua, deshalb komme ich auch mit den Angaben im Zitat nicht zurecht. Das tut mir leid, Jürgen. Da du mich um ein kleines Skript gebeten hattest ging ich davon aus, dass du es verstehen würdest. Aber wenn du das einfach gehaltene Beispiel mit den Beatles Namen nicht verstehst, dann nützt dir ein Beispiel, basierend auf deiner Anlage auch nichts. Das wäre nur komplizierter. Viele Grüße Götz
jloos Geschrieben 7. Dezember 2021 Autor Geschrieben 7. Dezember 2021 Hallo Goetz, ich habe eben Probleme Dein Beispiel mit den Beatles und deren Gruppenmitglieder auf meinen Fall umzusetzen. Lasse ich Dein Skript auf der Lua Demoseite ablaufen, kommt an Platz 1 steht: John an Platz 2 steht: Paul an Platz 3 steht: George an Platz 4 steht: Ringo raus. Dein Skript funktioniert. Aber ich kann es nicht auf meine Situation umsetzen. Die Abhängigkeiten sind: Fahrstraße = Abfragestelle , Lok-Nr. Außerdem ist mir nicht klar, wohin die Ausgabe geschrieben wird. Aber trotzdem vielen Dank für Deine Hilfe Goetz, vielleicht kommt bei mir noch durch viel Lesen im Forum die Erkenntnis. Gruß Jürgen
Little Geschrieben 7. Dezember 2021 Geschrieben 7. Dezember 2021 Hallo Jürgen, schau Dir schnell mal dieses Beispiel mit dem Skript von Götz an. Du musst nur das Ereignisprotokoll einblenden. Bei jedem Tastendruck wird das Skript ausgeführt und im Ereignisprotokoll angezeigt..... E5D00493-4C13-4C66-BE3F-D2077F91A38E Gruß Frank
Goetz Geschrieben 7. Dezember 2021 Geschrieben 7. Dezember 2021 Hallo Jürgen, vor einer Stunde schrieb jloos: Dein Skript funktioniert. Wenn du nur sehen kannst, dass es funktioniert, aber nicht wie es funktioniert, dann nützt das alles nichts. Das Skript ist so klein und überschaubar, dass du wirklich den kompletten Mechanismus in allen Einzelheiten sehen kannst. Und wenn du das durchschaust, dann kannst du es auch auf andere Situationen umsetzen. Viele Grüße Götz
jloos Geschrieben 8. Dezember 2021 Autor Geschrieben 8. Dezember 2021 Hallo, nach wie vor weiß ich nicht, wie ich das Beispiel auf meine Datenbank anwenden soll. Bei Günther Jauch könnte ich jetzt meinen Telefonjoker anrufen :-) Gruß Jürgen
Goetz Geschrieben 8. Dezember 2021 Geschrieben 8. Dezember 2021 Es ist kein Quizz, Jürgen. Kein Ratespiel. Mit dem folgenden Skript siehst du im Protokollfenster eine Liste all deiner 207 Fahrstraßen und ihren aktuellen Status. local FS = $("Ereignisse").variables["Fahrstrassen"] local Status = {"ist nicht aktiv", "ist angefordert", "läuft ein", "ist eingelegt und verriegelt"} local Muster = "Fahrstraße %s %s" for index1, value1 in ipairs(FS) do for index2, value2 in ipairs(value1) do local Name = value2.name local Text = Status[value2.state + 1] print(Muster:format(Name, Text)) end end Das Beispiel zeigt dir, wie du alle Fahrstraßen aus deiner Tabellenstruktur (mit Untertabellen!) auslesen kannst. Aber ich fürchte, das wird dir auch nicht weiterhelfen. In eine Excel Tabelle kann ich die Daten nicht wandeln. Das lässt das Studio nicht zu. Die Gefahr des Missbrauchs wäre zu hoch. Viele Grüße Götz
jloos Geschrieben 9. Dezember 2021 Autor Geschrieben 9. Dezember 2021 Hallo Götz, vielen Dank. Ich werde damit experimentieren. Gruß Jürgen
prinz Geschrieben 9. Dezember 2021 Geschrieben 9. Dezember 2021 Kleiner Hinweis: Wenn man im Skript von Götz als Muster "%s;%s" nimmt und die Ausgabe / das Protokoll in eine Datei schreibt, erhält man ein Format, dass als .CSV-Datei in Excel eingelesen werden kann. Grüße, Wolfgang
Goetz Geschrieben 9. Dezember 2021 Geschrieben 9. Dezember 2021 vor 4 Stunden schrieb prinz: und die Ausgabe / das Protokoll in eine Datei schreibt ... daran scheitert es. Das MBS erlaubt aus Sicherheitsgründen nicht, dass man per Lua eine Datei erstellt.
prinz Geschrieben 10. Dezember 2021 Geschrieben 10. Dezember 2021 Hallo Götz, sicherlich hast Du da Recht. "Automatisiert" ist das nicht möglich. Es können aber Daten nach Excel mit einigen manuellen Eingriffen übergeben werden: Diese Skript schreibt einige Informationen in das Protokoll (Signal, wartenden Zug falls vorhanden). Das Ergebnis im Protokoll sieht dann so aus: Mit der rechten Maustaste kann man die Protokolldaten in eine Textdatei speichern. Mit Excel (hier bei mir OpenOffice) kann man diese Datei laden: Das Ergebnis sieht dann so aus: Mit wenigen Befehlen (alle Zeilen löschen, die in Spalte B nicht "Signalbelegung:" beinhalten, ggf. Spalte A und B löschen) hat man das gewünschte Ergebnis in Excel. Das entspricht nicht den ursprünglichen Anforderungen hier. Aber generell ist es möglich, Daten nach außen zu geben. Grüße, Wolfgang
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden