$[if $[v1]$ zs_contains 'Tag' 'd' 'Monat' 'M' 'Jahr' 'y' '']$

Ziel: Überprüfen, ob der Wert in $[v1]$ einem der Begriffe „Tag“, „d“, „Monat“, „M“, „Jahr“ oder „y“ entspricht.

Beobachtung:
Sobald im Vergleich der Wert 'd' auftaucht – also z. B. $[v1]$ = Tag und im Ausdruck 'd' enthalten ist – liefert die Bedingung immer ein falsches Ergebnis, obwohl 'Tag' korrekt enthalten ist.

Alle anderen Vergleichswerte wie 'M''y''Monat', etc. funktionieren problemlos.


Vermutung:

Möglicherweise wird das kleine 'd' intern mit dem d-Kommando von Tomedo (für Tage, Datumsrechnungen, Zeiträume) verwechselt oder kollidiert an dieser Stelle mit einem reservierten Ausdruck.


Frage in die Runde:

  • Ist dieses Verhalten bekannt?

  • Gibt es Einschränkungen für Buchstaben wie 'd''M' oder 'y', wenn sie innerhalb von Bedingungen verwendet werden?

Ich freue mich über Rückmeldungen – und gern auch über offizielle Hinweise, ob das so gewollt ist oder ein Bug vorliegt.

Folgende Syntax

$[if $[v1]$ zs_contains 'Tag' 'd' 'Monat' 'M' 'Jahr' 'y' '']$

liefert bei Tag > d immer ein falsches Ergebnis. Liegt das möglicherweise daran, dass das kleine "d" für das d-Kommando reserviert ist. Mit allen anderen Eingaben klappt es.

Gefragt in Bug von (38.8k Punkte)
Bearbeitet von
0 Punkte

1 Antwort

Moin Christian,

 

ich kann dein Problem noch nicht ganz erfassen.

Ich habe die Syntax bei mir einmal nachgestellt und sie funktionert.

Sobald in v1 das Wort "Tag" enthalten ist, wird "d" ausgegegen. Analog für Monat und Jahr.

Was genau funktioniert bei dir nicht? Wie genau wäre dein gewünschtes Ergebnis? Was genau meinst du mit

liefert bei Tag > d immer ein falsches Ergebnis

 

willst du am Ende sowas dastehen haben wie dMy?

Beantwortet von (30.9k Punkte)
0 Punkte

Hallo Andreas

habe dir eben per Mail ein CKE geschickt.

Es funktioniert auch diese Version nicht 

$[if $[E1]$ zs_equals 'd' 'Tag' 'M' 'Monat' 'q' 'Quartal' 'y' 'Jahr'  '']$

Im Beispiel unten lese ich per regex aus dem Karteieintrag DOK einen bestimmten Inhalt aus.
Die Kürzel d,M,q,y möchte ich über das if-Kommando umwandeln.
Es funktioniert immer nur bei "d" klappt es nicht. Ich vermute schwer dass der begriff von Tomedo reserviert ist.

Aha!

Du meinst also nicht 

$[if $[v1]$ zs_contains 'Tag' 'd' 'Monat' 'M' 'Jahr' 'y' '']$

sondern 

$[if $[v1]$ zs_equals 'd' 'Tag' 'M' 'Monat' 'y' 'Jahr'  '']$

 

Das Problem kann ich nachstellen und vermute auch, dass das if-Kommando dann aufs d-Kommando zurückgreifen möchte. Hab es auch mit diversen Tricks nicht hinmogeln können. 

Da muss Tomedo ran ;-)

welche möglichen Ergebnisse hat denn E1? Sind diese begrenzt?
Ja die sind begrenzt. Ich habe das Problem anderweitig gelöst. Habe aber lange geknobelt und stundenlang den Fehler gesucht. Weil das sehr komplexe Aktionen sind, war die Analyse sehr aufwändig. Ich habe jetzt nur der besseren Darstellung wegen, das einfache Beispiel gewählt.
Beim Platzhalter
$[if $[v1]$ zs_equals 'd' 'Tag' 'M' 'Monat' 'y' 'Jahr'  '']$
und dem Inhalt "d" von Feld v1 bleibt nach dem Ersetzen der Feldreferenzen folgender Platzhalter
$[if d zs_equals 'd' 'Tag' 'M' 'Monat' 'y' 'Jahr'  '']$
Da d ein bekanntes Kommando ist, wird das ausgeführt und liefert das aktuelle Datum, wodurch kein Vergleichswert getroffen wird.

Das Problem besteht also bei dieser Konstruktion immer, wenn die Feldreferenz eine Zeichenkette liefert, die gleichzeitig ein Kommando oder Makro ist. Hier können Sie sich helfen, indem Sie der Feldreferenz und den Vergleichswerten ein Zeichen voranstellen, z.B. funktioniert
$[if 0$[v1]$ zs_equals 0d Tag 0M Monat 0y Jahr]$
da 0d kein Briefkommando ist.
Prima, habe mir schon sowas gedacht.
Das mit der 0 vorweg brauche ich auch bei den scores damit bei leeren Inhalten keine Fehlermeldung kommt.
Das ist ja tricky. Mit dem Lösungsansatz wie von Herrn Bürger gezeigt lässt sich dann vermutlich auch das Problem mit dem Wort "kein" lösen, was ich mal in der Vergangenheit angefragt hatte:

https://forum.tomedo.de/index.php/80162/mehrfachauswahl-feld-wort-kein-darf-auswahl-nicht-vorkommen-sonst-wird-kein-wert-interpretiert
Hallo, da muss ich auch nochmal nachhaken: ich lasse in einem CKE Werte mit einem Score in eine andere Einheit umrechnen, da die aus dem Structured Report in der falschen kommen: $[v82]$ *10. Wenn ich den Wert nicht messe, und somit v82 leer ist, kommt eine Fehlermeldung, Score ist logisch falsch...Kann ich mit der 0 vorweg erreichen, dass das nur berechnet und angezeigt wird, wenn auch befüllt, als für in o.g. Fall v82 einen Wert hat und sonst das ganze frei gelassen wird? Wäre das dann 0 $[v82]$ *10?

Vielen Dank und viele Grüße,

Joachim

Wäre das dann 0 $[v82]$ *10?

 

Sie müssen das Leerzeichen weglassen, also:

0$[v82]$ *10

19,737 Beiträge
28,190 Antworten
50,898 Kommentare
33,504 Nutzer