gmd Posted March 23 Posted March 23 Hallo, Ereignis: Ein Gleiskontakt mit Schlagwort "XYZ" wird ausgeloest Ich habe contact und vehicle als variablen im script. Kann ich das schlagwort abfragen, welches ausgeloest hat ? Gruss Gmd
Hawkeye Posted March 23 Posted March 23 vor 1 Stunde schrieb gmd: Ereignis: Ein Gleiskontakt mit Schlagwort "XYZ" wird ausgeloest Ich habe contact und vehicle als variablen im script. Kann ich das schlagwort abfragen, welches ausgeloest hat ? Jaaaaaaa, aber wozu? Das Ereignis wurde doch explizit durch das Schlagwort ausgelöst. Aber du kannst dir das auch gerne vom Programm nochmal bestätigen lassen. VG, Hawkeye
HaNNoveraNer Posted March 23 Posted March 23 Ein vehicle hat den Gleiskontakt ausgelöst. Das Schlagwort XYZ steht im Gleiskontakt. Der kann aber mehrere Schlagworte haben. Aber in diesem Ereignis ist XYZ ja bekannt, da es nur aufgerufen wird bei Schlagwort XYZ.
gmd Posted March 23 Author Posted March 23 (edited) Ja, aber in einem generischen script verwendest du keine "expliziten" werte. Gruss Gmd Edit: fuer contact und vehicle brauche ich auch keine expliziten referenzen und kann voellig allgemeine funktionen bauen, die unabhaengig vom kontaktname sind und muss nicht jedesmal wenn ich den aufruf verwende die parameter explizit einfuellen. Ich kann die verteilung auf ereignisse veraendern ohne jedesmal den code anfassen zu muessen. Ein weiteres problem ist, dass man nicht die schlagworte zu einem objekt bekommt ohne die namen zu kennen. Zumindest kenne ich keinen weg. Lua ist nicht sehr geeignet um auf der Meta ebene zu programmieren. Da muss man einige umwege gehen. Edited March 23 by gmd
EASY Posted March 23 Posted March 23 Hallo, vor 3 Stunden schrieb gmd: Ein weiteres problem ist, dass man nicht die schlagworte zu einem objekt bekommt ohne die namen zu kennen. Zumindest kenne ich keinen weg. Lua ist nicht sehr geeignet um auf der Meta ebene zu programmieren. Da muss man einige umwege gehen. der einzige Umweg, der mir einfällt ist, den Schlagwortnamen (die Schlagwortnamen) in einer Objekt-Textvariablen (Liste Objekt-Textvariable) zu hinterlegen und diese dann abfragen. Dann hast Du eine (namentlich bekannte) Variable für weitere Verzweigungen... dies steht allerdings etwas entgegen zu dem eigentlichen Sinn von Schlagworten, da man so prinzipiell natürlich dann auch nur über die Variable arbeiten könnte. Gruß EASY
Goetz Posted March 23 Posted March 23 vor 3 Stunden schrieb gmd: in einem generischen script verwendest du keine "expliziten" werte. Wenn ein Ereignis durch Objekte mit einem Schlagwort ausgelöst werden, dann reagieren sie nur auf ein einziges, explizites Schlagwort. Da ist nichts generisches an dieser Stelle. Also kannst du dasselbe Wort auch innerhalb des Ereignisses explizit angeben (und zum Beispiel als Argument an andere Funktionsaufrufe weiterreichen.)
gmd Posted March 23 Author Posted March 23 32 minutes ago, Goetz said: Wenn ein Ereignis durch Objekte mit einem Schlagwort ausgelöst werden, dann reagieren sie nur auf ein einziges, explizites Schlagwort. Da ist nichts generisches an dieser Stelle. Also kannst du dasselbe Wort auch innerhalb des Ereignisses explizit angeben (und zum Beispiel als Argument an andere Funktionsaufrufe weiterreichen.) sooo wrong . Gruss Gmd
gmd Posted March 23 Author Posted March 23 36 minutes ago, EASY said: Hallo, der einzige Umweg, der mir einfällt ist, den Schlagwortnamen (die Schlagwortnamen) in einer Objekt-Textvariablen (Liste Objekt-Textvariable) zu hinterlegen und diese dann abfragen. Dann hast Du eine (namentlich bekannte) Variable für weitere Verzweigungen... dies steht allerdings etwas entgegen zu dem eigentlichen Sinn von Schlagworten, da man so prinzipiell natürlich dann auch nur über die Variable arbeiten könnte. Gruß EASY Ja das tue ich .. pflege eine liste aller schlagworte und gehe einfach alle durch zum entfernen und auch zum testen ob vorhanden. Man muss ziemlich viel umwege gehen um eine library von generischen funktionen aufzubauen. So scheint hier niemand zu denken. Gruss Gmd
gmd Posted March 23 Author Posted March 23 (edited) 1 hour ago, EASY said: Hallo, der einzige Umweg, der mir einfällt ist, den Schlagwortnamen (die Schlagwortnamen) in einer Objekt-Textvariablen (Liste Objekt-Textvariable) zu hinterlegen und diese dann abfragen. Dann hast Du eine (namentlich bekannte) Variable für weitere Verzweigungen... dies steht allerdings etwas entgegen zu dem eigentlichen Sinn von Schlagworten, da man so prinzipiell natürlich dann auch nur über die Variable arbeiten könnte. Gruß EASY Easy koennte fuer dich auch interessant sein. for k, v in pairs(contact.variables) do print("VAR: " .. tostring(k) .. " = " .. tostring(v)) end probier es aus .. das ist ein teil der miete Warum bin ich eigentlich nicht frueher darauf gekommen !! gruss Gmd Edit: noch ein tip hier weise ich ein keyword zu entryObject.variables[keywordText.."_Start"] = keyword hier frage ich ab contact.variables[keywordText.."_Start"] == keyword das funktioniert auch so weit .. aber wenn ich versuche diese abfrage in eine funktion zu legen wie hier function IsStartKontakt(keyword, kontakt) if kontakt.variables[keyword .. "_Start"] == keyword then return true else return false end end dann ist das immer false Diese funktion bringt true zurueck .. function IsStartKontakt(keyword, kontakt) if kontakt.variables[keyword .. "_Start"] then return true else return false end end Eine weitere coding falle Edited March 23 by gmd
gmd Posted March 23 Author Posted March 23 1 minute ago, Goetz said: care to explain? Ja werde ich tun, ist aber nicht so einfach ohne das entsprechende beispiel fertig zu haben. Hier eine beschreibung der zielsetzung. Stell dir folgende anwendungen vor: Ein Taxiplatz an dem fahrzeuge ein und ausfahren an halteplaetzen Busse halten in reihe an einer umsteigestation Die Einfahrt fuer LKW in meine RoLa Das Auffahren von Fahrrzeugen auf die wagen .. Eine warteschlange von personen vor einem point of interest und was einem noch so alles einfaellt mit einer "segmentierten Einfahrt" mit oder ohne ampelsteuerung. Das alles wird mit dem gleichen script reaslisiert und definitionstablellen mit minimalen (keinen) eintraegen von "Expliziten" werten. Geht alles dynamisch und kann auf verschiedene events verteilt werden oder auch nicht. Grund: Man muss nicht immer wieder ueber die gleiche logik nachdenken oder die gleichen fehler beseitigen und testen. Es ist wie eine library die man einfach verwendet. Die programmierung erfolgt auf der "Meta" ebene und nicht auf der logischen ebene der evenets, dort laeuft das programm nur ab. Alles ist in parametrisierte funktionen gepackt. Man kann die definitionstabellen von hand erstellen und in Lua bleiben, mein ziel ist es auch diese tabllen von meinem programm zu generieren. Wenn ich meine RoLa fertig habe mit den verallgemeinerten scripten dann werde ich dir den entwurf zur durchsicht geben. Dann wird das klarer und bedarf nicht so vieler worte. Gruss Gmd
gmd Posted March 23 Author Posted March 23 (edited) Wen es interessiert - hier eine loesung die ich fuer mich ausgetueftelt habe .. Ich verwende schlagworte fuer eine serie von objekten, kennzeichne aber einige mit zusaetzlichen merkmalen wie "_Start" oder "_Ende" usw. also zum Beispiel XYZ und XYZ_Start wenn nun XYZ ausloest (weil ich alle XYZ haben will) aber fuer _Start etwas anderes tun will dann benutze ich function GetStartKeywordPrefix(contact) for k, v in pairs(contact.variables) do local prefix = string.match(k, "^(.-)_Start$") if prefix then return prefix end end return nil -- Not found end und bekomme das ausloesende schlagwort und gleichzeitig die information _Start. (_Start is bei mir immer nur einmal vorhanden) Man kann natuerlich auch alle moeglichen anderen variationen verwenden und es muss auch nicht das ausloesende schlagwort sein. Damit lassen sich auch kaskaden von filtern bauen. Auf diese art und weise muss ich nirgendwo das schlagwort explizit angeben. Ich kann dann einen event "Alle Kontakte" oder was auch immer verwenden und trotzdem auf das schlagwort abfragen ohne durch meine gesamte liste durchgehen zu muessen. Gruss Gmd Nachtrag: Ich habe diese funktion auch fuer variable suffixes, die auch Lua special characters enthalten koennen. function GetKeywordPrefixBySuffix(contact, suffix) -- Escape the suffix if needed for pattern matching local escapedSuffix = suffix:gsub("([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1") local pattern = "^(.-)" .. escapedSuffix .. "$" for k, _ in pairs(contact.variables) do local prefix = string.match(k, pattern) if prefix then return prefix end end return nil end Edited March 23 by gmd
Goetz Posted March 23 Posted March 23 vor einer Stunde schrieb gmd: Hier eine beschreibung der zielsetzung. als ob ich die nicht längst kapiert hätte, gmd. Ich habe dich lediglich auf einen technischen Aspekt der EV (wie ich sie kenne) hingewiesen. Der tangiert deine Lösung offenbar nicht. Und ich dachte, du könntest mir vielleicht erklären, warum dieser Aspekt bei dir keine Rolle spielt. Sowas wie "weil ich die Ereignisse an anderer Stelle verfolge und nicht das nutze, was du als EV kennst." Weil du großspurig "sooo wrong" geantwortet hast. Aber mach mal ... Viele Grüße Götz
EASY Posted March 23 Posted March 23 (edited) Hallo, vor 2 Stunden schrieb gmd: function IsStartKontakt(keyword, kontakt) if kontakt.variables[keyword .. "_Start"] == keyword then return true else return false end end dann ist das immer false Diese funktion bringt true zurueck .. function IsStartKontakt(keyword, kontakt) if kontakt.variables[keyword .. "_Start"] then return true else return false end end Eine weitere coding falle ... die Falle liegt allerdings bei Dir Du hast in Deiner Definition der Funktion "function IsStartKontakt(keyword, kontakt)" "keyword" als Variablenname. Dies ist im MBS lua ein Schlüsselwort! (auf das Du ja auch noch abfragst) if kontakt.variables[keyword .. "_Start"] == keyword then... kann in diesem Fall niemals "true" sein. Mit... function IsStartKontakt(key, kontakt) if kontakt.variables[key .. "_Start"] == keyword then return true else return false end end ... geht auch die 1. Variante... Gruß EASY Edited March 23 by EASY
gmd Posted March 24 Author Posted March 24 17 hours ago, EASY said: Hallo, ... die Falle liegt allerdings bei Dir Ha, und ich koennte schwoeren dass ich das probiert habe .. Ist aber logisch, danke fuers finden. Gruss Gmd
EASY Posted March 24 Posted March 24 Hallo, Am 23.3.2025 um 12:15 schrieb gmd: Easy koennte fuer dich auch interessant sein. for k, v in pairs(contact.variables) do print("VAR: " .. tostring(k) .. " = " .. tostring(v)) end probier es aus .. das ist ein teil der miete Warum bin ich eigentlich nicht frueher darauf gekommen !! gruss Gmd ... liefert zwar nicht für alle Variablentypen ein Ergebnis (v)... ich aber für einen Überblick ganz praktisch und ausbaufähig Gruß EASY
gmd Posted March 25 Author Posted March 25 14 hours ago, EASY said: Hallo, ... liefert zwar nicht für alle Variablentypen ein Ergebnis (v)... ich aber für einen Überblick ganz praktisch und ausbaufähig Gruß EASY for k, v in pairs(contact.variables) do print("VAR: " .. tostring(k) .. " = " .. tostring(v)) if v == keyword then print("VAR is keyword") end end Zum beispiel, empty v test fuer keyword. Ich nutze das jetzt um keywords der beteiligten objekte abzufragen. Gruss Gmd
EASY Posted March 26 Posted March 26 Hallo, Am 25.3.2025 um 07:12 schrieb gmd: Zum beispiel, empty v test fuer keyword. Ich nutze das jetzt um keywords der beteiligten objekte abzufragen. ... "empty" ist v auch, wenn die Variable ein Objekt oder eine Liste / Tabelle beinhaltet... ist also nicht so ganz zuverlässig... Gruß EASY
gmd Posted March 27 Author Posted March 27 siehe oben -- empty, check for keyword if v == keyword gruss Gmd
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now