Reihenfolge von Komma-getrennten Einträgen ändern

Ich möchte im Feld GENRE die Reihenfolge (durch Komma-leer getrennt) der Einträge nach folgendem Prinzip ordnen:
"Sci-Fi" immer zuerst, restliche Reihenfolge unverändert. Die Anzahl der Einträge ist unterschiedlich. Wenn der Eintrag "Sci-Fi" nicht vorkommt aber "Fantasy" oder "Mystery", treten diese an die erste Stelle. Wenn keiner dieser Einträge vorkommt oder allein vorkommt, bleibt das Feld unverändert.

Beispiel vorher:
Action, Sci-Fi, Thriller
Drama, Sci-Fi, Thriller
Komödie, Drama, Fantasy, Sci-Fi
Drama, Sci-Fi
Action, Abenteuer, Drama, Sci-Fi
Drama, Fantasy, Mystery, Romanze, Thriller
nachher:
Sci-Fi, Action, Thriller
Sci-Fi, Drama, Thriller
Sci-Fi, Komödie, Drama, Fantasy
Sci-Fi, Drama
Sci-Fi, Action, Abenteuer, Drama
Fantasy, Drama, Mystery, Romanze, Thriller

Wie müsste eine entsprechende Aktion aussehen?

Also nur für Sci-Fi habe ich eine Lösung. Man müsste entsprechend Filtern.
Ersetzen mit reg. Ausd. Allerdings nur bis zu 4 Einträgen.
Alles in einer Aktion:

2 Einträge, 2. Stelle
(.+), Sci-Fi
Sci-Fi, $1

3 Einträge, 2. Stelle
(.+), Sci-Fi, (.+)
Sci-Fi, $1, $2

3 Einträge, 3. Stelle
(.+), (.+), Sci-Fi
Sci-Fi, $1, $2

4 Einträge, 2. Stelle
(.+), Sci-Fi, (.+), (.+)
Sci-Fi, $1, $2, $3

4 Einträge, 3. Stelle
(.+), (.+), Sci-Fi, (.+)
Sci-Fi, $1, $2, $3

4 Einträge, 4. Stelle
(.+), (.+), (.+), Sci-Fi
Sci-Fi, $1, $2, $3

Wenn du sowieso filterst, dann geht auch der Ansatz mit brutaler Gewalt:
eine Aktion "Ersetzen", die Sci Fi Komma Blank durch nichts ersetzt, also löscht. Da ist es dann Wurscht, wo das Sci Fi steht.
Und gleich anschließend eine Aktion vom Typ "Text-feld Formatieren" für genre.
mit dem Format-String: Sci Fi, %genre%

Nur so eine erste Überlegung für den leichtesten Fall ...

"Sci-Fi" immer zuerst, restliche Reihenfolge unverändert. 1. TMP_GENRE <== $regexp(%GENRE%,'(,\s+)',',')',' 2. TMP_GENRE <== $regexp(%TMP_GENRE%,'^(.*?,)?(Sci-Fi,)(.*?,)?$','$2$1$3') 3. TMP_GENRE <== $trimRight(%TMP_GENRE%,',') 4. TMP_GENRE <== $replace(%TMP_GENRE%,',',', ') 5. GENRE <== %TMP_GENRE% 6. TMP_GENRE <== $char(0)

DD.20140903.2031.CEST

Das müsste funktionieren! Allerdingd muss ich 2 Fälle unterscheiden:

  1. wie obem; Sci-F steht in der Mitte,
  2. Sci-F seht am Ende (ohne Komma).

Trotzdem: Danke

Der leichteste Fall würde mir schon genügen. Bei der Durchföhrung wird jedoch lediglich ein zusätzliches Leerzeichen nach dem Komma eingefügt. Weil ich die Aktionsreihenfolge aber nicht durchschaue, kann ich mich nicht auf Fehlersuche begeben.

Trotzdem: Danke

Filter: GENRE HAS "Sci-Fi" GENRE <== 'Sci-Fi, '$trimRight($replace(%GENRE%', ','Sci-Fi, ',),', ')

DD.20140903.2206.CEST

Danke! Danke! Das hat auf Anhieb funktioniert. 1043 wurden ersetzt. Als Filter habe ich "%genre% HAS ", Sci-Fi"" genommen.

Nachtrag:
Ich konnte die o. g. Aktion auch abgewandelt für andere Genre benutzen. Nochmals Danke für die Hilfe.

Hier ist dieselbe Funktion, etwas allgemeiner kodiert, zum Gebrauch mit variablen Eingabewerten.

1: TMP_ITEM <== 'Sci-Fi'

2: TMP_ITEMLIST <== %GENRE%
3: TMP_SEP <== ', '
4: GENRE <== $ifgreater($strstr(%TMP_ITEMLIST%,%TMP_ITEM%),0,%TMP_ITEM%%TMP_SEP%$trimRight($replace($trim(%TMP_ITEMLIST%,%TMP_SEP%)%TMP_SEP%,%TMP_ITEM%%TMP_SEP%,),%TMP_SEP%),%TMP_ITEMLIST%)
5: TMP_SEP <== $char(0)
6: TMP_ITEMLIST <== $char(0)
7: TMP_ITEM <== $char(0)

Test2014_20140903.Itemlist.SetItemToFirstPos.mta (359 Bytes)

DD.20140904.1101.CEST

Test2014_20140903.Itemlist.SetItemToFirstPos.mta (359 Bytes)