Jump to content

Schlüsselwort als Parameter


Empfohlene Beiträge

Hallo Michel,

vor einer Stunde schrieb michellombart:

Ich kann problemlos eine Liste übergeben, aber nicht ein Schlüsselwort.

Das liegt eventuell daran, dass das Schlüsselwort selbst der Name der Variablen ist und "keyword" ihr Inhalt.
Deshalb findest du kein generisches "keyword", welches du übergeben könntest.

Für die Übergabe ist daher sinnvoller, eine generische Variable anzulegen und dort dein Keyword als Text zu speichern.

Alternativ kannst du die ganze "Variables" Liste durchforsten und dann den Bezeichner der Zelle zurückgeben, die ein "keyword" enthält.
Aber das scheint mir zu sehr "brute force" zu sein.

@HaNNoveraNerhat inzwischen perfekt zusammen gefasst, was ich hier umständlich beschreibe.
Ich schicke es mal trotzdem ab - als Ergänzung zu seinem Hinweis.

Viele Grüße
Götz

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb HaNNoveraNer:

Wenn ich dem Kontakt ein Schlagwort "Secteur #0" gebe, wie kann ich dann mit diesem Schlagwort
alle Signale mit dem gleichen Schlagwort schalten?

in einem Wort: umständlich
Drum hat Michel den richtigen Weg gewählt und im Kontakt den Namen des Schlagwortes in einer Text-Variablen hinterlegt.
Die kann er bequem auslesen und dann den Inhalt der Variablen als Schlagwort für seine "Wiederholung für alle Elemente mit dem Schlagwort" benutzen.

Der Zweck eines Schlagwortes ist, viele gleichartige Objekte zusammenzufassen und gemeinsam ansprechen zu können.
Schlagworte benutzt man nicht zur Unterscheidung (wie ich es hier oft sehe).

Es ist nicht klug, Zügen das Schlagwort "Personenzug", "Güterzug", "Eilzug" etc. zu geben.
Besser ist eine Textvariable "Zuggattung" und darin dann das passende Wort "Personenzug", "Güterzug" oder "Eilzug".
So kann ich diese eine Variable auslesen um zu erkennen, um welchen Zug es sich handelt.

Wer Zugarten per Schlagwort unterscheidet, der hat am Ende eine ganze Reihe Bedingungen in seinem Code. Weil er dann jedes Schlagwort einzeln auf seine Existenz prüfen muss. Das funktioniert zwar, ist aber von hinten durch die Brust ins Auge.

Liest man hingegen eine Variable "Zuggattung" aus, dann kann man anschließend direkt die Befehle ausführen, welche zum gefundenen Wort passen. Am allerbesten geht das mittels Tabellen, in denen diese Begriffe der Bezeichner einer Zelle sind. Damit erspart man sich die ganze if-Orgie komplett.

Viele Grüße
Götz

Bearbeitet von Goetz
Ergänzungen
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 41 Minuten schrieb Goetz:

Es ist nicht klug, Zügen das Schlagwort "Personenzug", "Güterzug", "Eilzug" etc. zu geben.
Besser ist eine Textvariable "Zuggattung" und darin dann das passende Wort "Personenzug", "Güterzug" oder "Eilzug".
So kann ich diese eine Variable auslesen um zu erkennen, um welchen Zug es sich handelt.

Ich werde die Anpassung der Zugtypen für das Projekt, an dem ich gerade arbeite, vornehmen. Es stimmt, dass es einfacher zu handhaben ist. 

Grüße.

Michel.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Jahre später...
Am 6.11.2021 um 19:22 schrieb Goetz:

Es ist nicht klug, Zügen das Schlagwort "Personenzug", "Güterzug", "Eilzug" etc. zu geben.
Besser ist eine Textvariable "Zuggattung" und darin dann das passende Wort "Personenzug", "Güterzug" oder "Eilzug".
So kann ich diese eine Variable auslesen um zu erkennen, um welchen Zug es sich handelt.

Hallo Goetz,

Ist das noch immer so, oder hat sich mit den Versionen auch diese Aussage geändert ?

Wenn das noch so ist, wie sollte das dann optimaler Weise nach gehen ?

Eine Tabelle mit allen möglichen Parameter Einträgen in jede Lok ?

(ZT = ZugTyp)

Tabelle "ZugTyp"

ZT01 - Text - Nahverkehr
ZT02 - Text - Fernverkehr
ZT03 - Text - Güterzug
ZT04 - Text - Personenzug
ZT05 - Text - Eilzug
ZT06 - Text - Schnellzug
usw

Wie fragst Du dann z.B. bei einer Bedingung das Ganze ab ?
Du willst wissen ob der Zug ein Personenzug für Nahverkehr ist - dann ......

Eigenschaft/Variable besitz den Wert
Auslöser Fahrzeug
?????????

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb bigrala:

Du willst wissen ob der Zug ein Personenzug für Nahverkehr ist - dann ......

Eigenschaft/Variable besitz den Wert
Auslöser Fahrzeug
?????????

Einfach so:

MBSV8103.thumb.jpg.61b7a8d31ead258f1d013a492cb1d20b.jpg

Damit kannst du z.B. eine Weiche stellen: Alle Züge mit dem Variablenwert "Nahverkehr" biegen ab; alle anderen fahren geradeaus.

Eine Tabelle braucht es dabei nicht.

Meiner persönlichen Meinung nach ist es außerdem besser, Namen von Variablen auszuschreiben. Mit den Abkürzungen kommt man spätestens dann, wenn man die Ereignisverwaltung drei Monate nicht mehr angefasst hat, komplett durcheinander.

HG
Brummi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm, worin liegt denn der Vorteil gegenüber Schlagworten.

Das erschließt sich mit nicht wirklich.
Ob den Wert einer Variablen oder die Existenz einer Variablen in der Lok abfrage ..... das ist doch der gleiche Aufwand - oder was übersehe ich dabei ?

 

Bezüglich Tabelle, das hatte Götz angesprochen, dass das am allerbesten wäre.
 

 

image.thumb.jpeg.6ede18b92df1b84e897f6665c85e3f4a.jpeg

 

 

Bearbeitet von bigrala
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb bigrala:

oder was übersehe ich dabei ?

Ein Schlagwort ist wie ein Variablenname. Also müsstest du einzeln nach jedem Schlagwort fragen.
Eine Variable mit dem Namen "Zuggattung" müsstest du hingegen nur einmal auslesen und hättest so mit einem Griff die Zuggattung zur Hand.

Liest doch mal bitte die ganze Antwort von mir, die du oben zitiert hast.
Da steht auch drin, warum es ist wie es ist und wie man damit umgehen kann.

 

vor 1 Stunde schrieb bigrala:

Bezüglich Tabelle, das hatte Götz angesprochen

Tabellen, in denen die Zuggattung der Bezeichner ist, Ralf.
Weißt du, was der Bezeichner in einer Tabelle ist?
Hier siehst du ein Beispiel. Die Tabelle "Einfahrten" hat drei Einträge, deren Bezeichner eine der Zuggattungen ist.
Jeder Eintrag ist dann wiederum eine Liste mit den erlaubten Fahrstraßen für diese Zuggattung.
In der Liste haben die Einträge keine Bezeichner, sondern sie sind durchnummeriert. Das unterscheidet eine Liste von einer Tabelle.

BezeichnereinerTabelle.jpg.532c1ea6bd04042dbb2e18a0f630edb4.jpg

Viele Grüße
Götz

Bearbeitet von Goetz
Ergänzungen
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Am 6.11.2021 um 19:22 schrieb Goetz:

Am allerbesten geht das mittels Tabellen, in denen diese Begriffe der Bezeichner einer Zelle sind. Damit erspart man sich die ganze if-Orgie komplett.

vor 4 Stunden schrieb bigrala:

Bezüglich Tabelle, das hatte Götz angesprochen, dass das am allerbesten wäre.

Ich habe ein kleines Beispiel gebaut...
Bild006.thumb.jpg.f6a215230e2c13e6f41f4b940277bfb6.jpg

Wenn der entsprechende Zugtyp dem in der Lokvariablen "Zugtyp" entspricht, sollen die entsprechenden Signale umgeschaltet werden...

Die Lok vom Typ "Fernverkehr" hat folgende Variableneinträge...

Bild001.thumb.jpg.51cab85a23a14711d088a2700d4b8199.jpg

Wichtig! Der Text in der Variablen "Zugtyp" entspricht dem Namen der Tabelle für die Signale...

... die Tabelle für die Signale hat folgende Einträge...
Bild002.thumb.jpg.abcdc0a61540f3ee75e7a916d857d9d3.jpg

So sieht es für den "Nahverkehr" aus...
Bild003.thumb.jpg.b4d85dd94a022f6b494124ccbe8a9a70.jpg

Bild004.thumb.jpg.f4e29ce10ba756467e09666a4c47778c.jpg

Die Darstellung für den Güterverkehr ist dem Schema entsprechend (wird deshalb nicht auch noch dargestellt)...

Der Eintrag in der EV sieht dann so aus...
Bild005.thumb.jpg.88297bfb908cae28a3dc64add36749ca.jpg

Es gibt nur eine Abfrage ob die Variable "Zugtyp" existiert (als Absicherung für den Fall, daß ein Zug nicht typisiert wurde).

Der Vorteil dieser Methode liegt darin, daß weitere Zugtypen einfach nach dem Schema für die Variablen in der Lok erstellt werden können ohne die EV ändern zu müssen.

Zum ausprobieren...
2024-03-05-Zugtypen unterscheiden 01.mbp

Gruß
EASY

 

Bearbeitet von EASY
Link zu diesem Kommentar
Auf anderen Seiten teilen

@Goetz
@Easy

Vielen Dank für eure Bemühungen, aber irgendwie habe ich da eine Denkblockade.

Klar, das Beispiel von Goetz ist gut und notwendig, wenn ich z.B. zufällige FS für die Einfahrt ermitteln will.
Dann kann ich (in diesem Fall) eine Zufallszahl zwischen 1 und 4 aus der Liste ermitteln lassen. ---- Mache ich auch schon seit einiger Zeit.

Beim Beispiel von Easy, dass ich eine Liste über Whg abarbeiten lasse, kann ich auch nachvollziehen.

 

Aber ..... ich benutze bisher Schlagwörter um z.B. Blocksignale oder BHF Signale zusammenzufassen. Lege in den Signalen mögliche FS ab und aktiviere diese wenn ein Signal übr ein Schlagwort angesprochen wird.
Außerdem habe ich den Loks bisher Schlagwörter für Fern- Nah- und Güterverkehr gegeben und das hat auch immer ganz gut funktioniert. Ob zur Auswahl einer FS bei Ein-/Ausfahrt oder zum Start aus einem Depot. Gerade wenn Züge mehrer Parameter haben, wie z.B. Güterzug für Nah- oder Fernverkehr, Nahverkehr mit SBahn, Eilzug etc.
Dann habe ich zwei Bedingung "Variable existiert" Güterzug und Nahverkehr oder Ferverkehr und das wars.

Bei dem Einsatz von Tabellen und Listen muss ich doch genauso abfragen, nur eben nicht nach Schlagworten sondern nach Variablen.

 

Habe mal versucht je zwei loks mit Text Variablen für Fernverkehr, Nahverkehr und Güterverkehr versehen und in ein Depot geschickt.
Wollte sie dann mal 5 sek nach betreten eines Depots din gleichen Zugtyp wieder starten. Bisher habe ich zur Auswahl welche Zugart gestartet werden soll Schlagworte benutzt.
Wenn ich es mit der Variablen Version probiere klappt es nicht.
 

Ich komme fast zu der Überzeugung, dass bei mir Hopfen und Malz verloren ist und eure Mühen umsonst sind.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 13 Minuten schrieb bigrala:

Bei dem Einsatz von Tabellen und Listen muss ich doch genauso abfragen

Nein, du entnimmst der Variable die Zuggattung und benutzt dieses Wort direkt als Adressierung in der Tabelle.
Ganz ohne Abfrage.

 

vor 13 Minuten schrieb bigrala:

Habe mal versucht je zwei loks mit Text Variablen für Fernverkehr, Nahverkehr und Güterverkehr versehen und in ein Depot geschickt.
Wollte sie dann mal 5 sek nach betreten eines Depots din gleichen Zugtyp wieder starten. Bisher habe ich zur Auswahl welche Zugart gestartet werden soll Schlagworte benutzt.
Wenn ich es mit der Variablen Version probiere klappt es nicht.

Das ist ein anderes Thema. Für die Unterscheidung der Züge im Depot benötigst du in der Tat das Schlagwort. Da nützt die Variable nichts.

 

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 3 Stunden schrieb bigrala:

Ich komme fast zu der Überzeugung, dass bei mir Hopfen und Malz verloren ist und eure Mühen umsonst sind.

... wenn Du Dich hinsetzt und einmal gemütlich mit einem Getränk (in dem die beiden Stoffe vorkommen) in der Hand darüber nachdenkst, kommt vielleicht doch noch die Erkenntnis, wann es sinnvoll sein könnte ein Schlagwort oder eine Variable zu setzen (prost!)9_9.
(Hinweis: manchmal ist etwas auch einfach nur abhängig vom Anwendungsfall und es gibt nicht die eine Antwort;))

Gruß
EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

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