Variable gegen (null) prüfen

Post Reply
TMueller26
Posts: 25
Joined: 05.04.2018, 06:56

Variable gegen (null) prüfen

Post by TMueller26 » 05.11.2018, 16:17

Hi,

ich hole mir aus diversen Abstellblöcken die Loks, die da gerade stehen (oder nicht stehen).

Wenn keine Lokid in den Block ist, bekomme ich vom Query derzeit ein null zurück.
In der darauf folgenden if Anweisung möchte ich nun prüfen, ob in der Variable ein null drin steht oder ein Text.

Wie kann ich dies am besten tun. Leider habe ich kein Operator gefunden, welcher mir hilft.

Hier mal ein Beispiel:

Code: Select all

            <query vr="RANG_BF201_TRAIN_AG103" table="bklist" id="AG103" get="locid"/>
            <trace text="Lok in AG103: @RANG_BF201_TRAIN_AG103"/>
<if condition="@RANG_BF201_TRAIN_AG103 - (null)" alltrue="true">
                <then>
                    <trace text="Lok in AG103 nicht gefunden"/>
                </then>
                <else>
                    <trace text="Lok in AG103 gefunden"/>
                </else>
            </if>
Sinn dahinter ist, dass das Lok-Umsetzscript vorher prüft, ob auf irgendeinen Abstellgleis ein Lok gerade bereitsteht. Wenn eine bereitsteht, wird die Lok getauscht, statt Sie umzusetzen. Andernfalls folgt das Umsetzen (Was schon wunderbar funktioniert.

Vielen Dank im voraus für eure Hilfe.

LG Tommy

rjversluis
Site Admin
Posts: 42304
Joined: 10.04.2006, 08:48
Location: Speyer, Germany
Contact:

Re: Variable gegen (null) prüfen

Post by rjversluis » 05.11.2018, 16:58

Hi Tommy,

das ist zZ nicht möglich um in XMLScript gegen NULL zu vergleichen.

TMueller26
Posts: 25
Joined: 05.04.2018, 06:56

Re: Variable gegen (null) prüfen

Post by TMueller26 » 06.11.2018, 08:28

Hallo Rob,

vielen Dank für die Antwort. Dann prüfe ich halt vorher den Status des Blocks und wenn er besetzt ist, muss ja was drin stehen ;-)
Planst du, dies irgendwann mit einzubauen?
Würde auf jeden Fall immer eine zusätzliche Abfrage sparen.
Ich würde dies an mehreren Stellen in den Scripten gebrauchen.

LG Tommy

JensH
Posts: 877
Joined: 30.07.2018, 18:59
Location: Dresden

Re: Variable gegen (null) prüfen

Post by JensH » 09.02.2019, 18:20

Hallo Rob,
habe den ganzen Tag im Forum gesucht, bis ich das gefunden habe. Stehe vor einem ähnlichen Problem:
Ich lese einen Fahrplan aus. Da diese ja in der Regel unterschiedlich lang sind, kommt nach der ersten
ungültigen Index-Abfrage ja dann "(null)" in den String aus der Query-Abfrage. Nun wäre es gut, wenn
man damit die While-Wend-Schleife verlassen könnte, aber dazu bedarf es einer Möglichkeit, auf
den Inhalt zu prüfen. Wenn (null) tatsächlich drin stünde, wäre das auch OK.
So etwa in der Art:

Code: Select all

<!-- Aufruf von Fahrplan-Name -->
<vr id="sidx" value="0"/>
<vr id="destination" text="-"/>
<vr id="leer" text="(null)"/>
<while condition="#sidx < 21" max="20">
	<query vr="var1" table="sclist" id="%oid%" sub="scentry" subidx="#sidx" get="block"/>
	<if condition="@var1 # @leer">
		<then>
			<break cmd="reason"/>
		</then>
		<else>
			<vr id="destination" text="@var1"/>
		</else>
	</if>
	...

JensH
Posts: 877
Joined: 30.07.2018, 18:59
Location: Dresden

Re: Variable gegen (null) prüfen

Post by JensH » 09.02.2019, 19:37

Hallo zusammen,
so geht es auch, mit <Switch> kommt auch die "(null)"

Code: Select all

<!-- Suche Zielblock -->
<vr id="sidx" value="0"/>
<vr id="destination" text="-"/>
<while condition="#sidx < 21" max="20">
	<query vr="var1" table="sclist" id="%oid%" sub="scentry" subidx="#sidx" get="block"/>
	<switch var="@var1">
		<case val="(null)">
			<!-- trace text="062-action: call-schedule-001.xml - eine (null) gefunden - raus hier bei Durchlauf: #sidx"/ -->
			<vr id="sidx" value="#sidx + 100"/>
		</case>
		<default>
			<vr id="destination" text="@var1"/>
			<!-- trace text="067-action: call-schedule-001.xml - @var1 * @destination"/ -->
		</default>
	</switch>
	<vr id="sidx" value="#sidx + 1"/>
</while>
<!-- trace text="072-action: call-schedule-001.xml - Fahrplan: %oid% * Zielblock: @destination"/ -->

hermannk
Moderator
Posts: 1145
Joined: 06.07.2014, 12:32
Location: Kiel Germany

Re: Variable gegen (null) prüfen

Post by hermannk » 09.02.2019, 23:41

Moin Tommy,
hiermit bin ich bisher erfolgreich:
<query vr="VarNamenstest" table="bklist" id="gesuchteID" get="id" />
<if condition="@VarNamenstest = (null)">
Genaue Details im Beispiel.
Gruß
Hermann
You do not have the required permissions to view the files attached to this post.

JensH
Posts: 877
Joined: 30.07.2018, 18:59
Location: Dresden

Re: Variable gegen (null) prüfen

Post by JensH » 10.02.2019, 09:16

Moin Hermann,
ok, das "=" habe ich nicht probiert, nur mit "#" und "-", da es sich ja um eine Textvariable handelt.
Ich glaube hier muss @Rob für Aufklärung sorgen, was da nun Sache und korrekt ist.

rjversluis
Site Admin
Posts: 42304
Joined: 10.04.2006, 08:48
Location: Speyer, Germany
Contact:

Re: Variable gegen (null) prüfen

Post by rjversluis » 10.02.2019, 09:31

Moin,

was habt ihr dann vor mit diese null Prüfung, und was sagt es aus?
Variable existiert nicht?

Schorse
Posts: 5352
Joined: 12.09.2008, 19:38
Location: D - Niedersachsen

Re: Variable gegen (null) prüfen

Post by Schorse » 10.02.2019, 10:29

Moin Rob,

ich lese z. B. die LokID einer Lok in einem Block in eine Variable ein und gebe deren Inhalt in einem Textfeld aus. Wird die Blockbelegung zurückgesetzt erscheint im Textfeld "null". Das fange ich mit der Zeile "<if condition="@text33 = (null)">" ab und schreibe stattdessen einen Leerstring in das Textfeld.

JensH
Posts: 877
Joined: 30.07.2018, 18:59
Location: Dresden

Re: Variable gegen (null) prüfen

Post by JensH » 10.02.2019, 11:59

Moin Rob, moin Gerd,
wenn man eine Liste, ob nun Lok, Wagen oder sonst eine Liste untersucht, so ist ja vorher grundsätzlich erst einmal
deren Anzahl an Index-Positionen unbekannt. Also lege ich z.B. eine Schleife an, in der ich die Daten so lange einlese,
bis eine definierte Abweichung z.B. in Form von "(null)" als Ergebnis zurück gegeben wird. Damit habe ich dann eine
Zahl (den maximalen Index-Wert je nach Gestaltung der Schleife abzüglich -1) mit der ich arbeiten kann und einen
Inhalt.

Da es ja nun offensichtlich so ist, das man die "(null)" auswerten kann, ist das Thema IMHO in soweit durch, als das
es eine Prüfmöglichkeit dafür gibt.

Zu klären wäre jedoch noch, wieso man eine Textvariable nun doch mit "=" in der IF CONDITION ... Abfrage bearbeiten
muss, weil die Vergleichsoperatoren für Text nicht zum Ziel führen. Gleichwohl funktioniert auch ein SWITCH-CASE, hier
als Text. Wie auch immer, der Aufwand im Skript ist ähnlich, denn alles was bei SWITCH nicht "(null)" ist, wird ja mit
der DEFAULT abgegessen.

Post Reply

Return to “XMLScripting & Aktionen (DE)”