gmd Geschrieben Sonntag um 04:47 Uhr Geschrieben Sonntag um 04:47 Uhr 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 Geschrieben Sonntag um 06:37 Uhr Geschrieben Sonntag um 06:37 Uhr 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 Geschrieben Sonntag um 06:38 Uhr Geschrieben Sonntag um 06:38 Uhr 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 Geschrieben Sonntag um 06:39 Uhr Autor Geschrieben Sonntag um 06:39 Uhr (bearbeitet) 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. Bearbeitet Sonntag um 07:02 Uhr von gmd
EASY Geschrieben Sonntag um 10:13 Uhr Geschrieben Sonntag um 10:13 Uhr 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 Geschrieben Sonntag um 10:17 Uhr Geschrieben Sonntag um 10:17 Uhr 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 Geschrieben Sonntag um 10:50 Uhr Autor Geschrieben Sonntag um 10:50 Uhr 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 Geschrieben Sonntag um 10:52 Uhr Autor Geschrieben Sonntag um 10:52 Uhr 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 Geschrieben Sonntag um 11:15 Uhr Autor Geschrieben Sonntag um 11:15 Uhr (bearbeitet) 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 Bearbeitet Sonntag um 11:55 Uhr von gmd
Goetz Geschrieben Sonntag um 11:15 Uhr Geschrieben Sonntag um 11:15 Uhr vor 25 Minuten schrieb gmd: sooo wrong care to explain?
gmd Geschrieben Sonntag um 11:28 Uhr Autor Geschrieben Sonntag um 11:28 Uhr 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 Geschrieben Sonntag um 12:20 Uhr Autor Geschrieben Sonntag um 12:20 Uhr (bearbeitet) 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 Bearbeitet Sonntag um 12:32 Uhr von gmd
Goetz Geschrieben Sonntag um 12:43 Uhr Geschrieben Sonntag um 12:43 Uhr 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 Geschrieben Sonntag um 14:08 Uhr Geschrieben Sonntag um 14:08 Uhr (bearbeitet) 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 Bearbeitet Sonntag um 14:15 Uhr von EASY
gmd Geschrieben gestern um 07:17 Uhr Autor Geschrieben gestern um 07:17 Uhr 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 Geschrieben gestern um 15:29 Uhr Geschrieben gestern um 15:29 Uhr 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 Geschrieben vor 12 Stunden Autor Geschrieben vor 12 Stunden 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
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