Jump to content

Empfohlene Beiträge

Geschrieben

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
 

 

Geschrieben

 

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?

Screenshot2025-03-23072544.thumb.jpg.fce810ee728f7215c94cd82130f79ee4.jpg

Das Ereignis wurde doch explizit durch das Schlagwort ausgelöst.

Aber du kannst dir das auch gerne vom Programm nochmal bestätigen lassen. ;) 

Screenshot2025-03-23073437.thumb.jpg.25c346922c72a45e988ebece9de1f4b4.jpg

VG,

Hawkeye

Geschrieben (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 von gmd
Geschrieben

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

Geschrieben
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.)

Geschrieben
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
 

Geschrieben
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
 

Geschrieben (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 von gmd
Geschrieben
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












 

Geschrieben (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 von gmd
Geschrieben
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

Geschrieben (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:o

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 von EASY
Geschrieben
17 hours ago, EASY said:

Hallo,

... die Falle liegt allerdings bei Dir:o

 

 

Ha, und ich koennte schwoeren dass ich das probiert habe ..
Ist aber logisch, danke fuers finden.
Gruss
Gmd
 

Geschrieben

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

Geschrieben
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
 

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...