# Skriptfunktion für erstes nicht leeres Feld

**URL:** https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851
**Category:** Vorschläge
**Created:** [March 10, 2026, 10:56am UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851 "2026-03-10T10:56:54Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![Crissov](https://community.mp3tag.de/user_avatar/community.mp3tag.de/crissov/32/6619_2.png) [@Crissov](https://community.mp3tag.de/u/Crissov)
#### Post date: [March 10, 2026, 10:56am UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/1 "2026-03-10T10:56:54Z")

</div>

Der angezeigte Feldinhalt einer meiner nutzerdefinierten Spalten ist ein Häkchen, wenn wenigstens eines der Felder einen Wert hat. Dazu verwende ich einfach `$if($or(%field1%,%field2%,…),✔,)`.

Für die Sortierung nach dieser Spalte würde ich gerne das jeweils erste vorhandene und nicht leere Tagfeld aus dieser Liste verwenden. Das geht mit Verschachtelung von Funktionen `$if2(%field1%,$if2(%field2,…))` und vielleicht auch mit eckigen Klammern `[[[%field1%]%field2%]…]`.

Das wird allerdings schnell unübersichtlich. Daher wünsche ich mir eine neue Skriptfunktion, die den Wert des ersten ihr übergebenen Arguments zurückgibt, der nicht leer, falsch oder Null ist, und den Rest verwirft. In manchen Sprachen funktionieren ODER-Ausdrücke so, aber ich denke nicht, dass es sinnvoll wäre, `$or()` oder `$if2()` derart anzupassen.

* * *

Bei dieser Gelegenheit wünsche ich mir außerdem, dass in der Dokumentation explizit erklärt wird, was in den [Skriptfunktionen](https://docs.mp3tag.de/scripting/#boolean-functions) als `true`/`false` gilt und was in [Formatierungsstrings](https://docs.mp3tag.de/format/#characters-with-special-functionality) als _found_ oder _filled_ gilt. Manche Platzhalter, insbesondere [technische Informationen](https://docs.mp3tag.de/format/#technical-information), haben ja immer einen Wert, aber manche sind Textstrings, andere Zahlenwerte, andere Platzhalter können einfach fehlen (~ `null`) oder nicht zutreffen und als Rückgabe von Funktionen gibt es auch boolesche Werte.

PS: Ich glaube, auch eine `$isempty()`-Funktion könnte manchmal hilfreich sein, vor allem, wenn sie auch dann `true` zurückgibt, wenn ein Stringargument nur Leerzeichen enthält oder ein Zahlenargument `0` entspricht.

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [March 10, 2026, 11:37am UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/2 "2026-03-10T11:37:20Z")

</div>

> [@Crissov](#):
>
> Für die Sortierung nach dieser Spalte würde ich gerne das jeweils erste vorhandene und nicht leere Tagfeld aus dieser Liste verwenden. Das geht mit Verschachtelung von Funktionen `$if2(%field1%,$if2(%field2,…))` und vielleicht auch mit eckigen Klammern `[[[%field1%]%field2%]…]`.

Ich vermute, dass die Lösung mit eckigen Klammern am einfachsten ist.  
Da würde allerdings genügen:  
`[%feld1%][%feld2%][%feld3%]`

> [@Crissov](#):
>
> wenn ein Stringargument nur Leerzeichen enthält oder ein Zahlenargument `0` entspricht.

dann wäre ja weder der String noch die Zahl leer - und ein $isempty() würde das Ergebnis `false` liefern.  
Wenn das für dich zu ignorierende Werte sind, müsstest du auf diese Bedingung testen und die Leerzeichen löschen, z.B. $trim() und die `0` mit einem Vergleich (größer, kleiner, etc.).

---

<div class="post-metadata">

### Author: ![Crissov](https://community.mp3tag.de/user_avatar/community.mp3tag.de/crissov/32/6619_2.png) [@Crissov](https://community.mp3tag.de/u/Crissov)
#### Post date: [March 10, 2026, 5:43pm UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/3 "2026-03-10T17:43:17Z")

</div>

Die eckigen Klammern hatte ich verschachtelt, um nur den ersten Feldwert und nicht alle zu erhalten, aber das kann so gar nicht funktionieren.

Ja, `$isempty()` ist für die beschriebene, pragmatische Funktionsweise nicht der optimale Name.

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [March 10, 2026, 6:03pm UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/4 "2026-03-10T18:03:04Z")

</div>

> [@Crissov](#):
>
> Für die Sortierung nach dieser Spalte würde ich gerne das jeweils erste vorhandene und nicht leere Tagfeld aus dieser Liste verwenden

Die eckigen Klammern tun eigentlich genau das: die bauen einen String zusammen, der aus dem Inhalt der vorhandenen, in den eckigen Klammern genannten Feldern besteht. Und den trage ich in der Spaltendefinition bei "Sortieren nach" ein.  
Wenn ich also  
Feld1 = Abba  
Feld2 = Beatles  
Feld3 = Creedence Clearwater Revival  
habe, würde  
`AbbaBeatlesCreedence Clearwater Revival` entstehen und nach Ab.. sortiert.  
Fällt Feld2 weg, wäre es immer noch gut genug mit  
`AbbaCreedence Clearwater Revival`  
inwieweit ich dann die unterschiedlichen Sortierergebnisse sinnvoll finde, steht auf einem anderen Blatt.

Bei benutzerdefinierten Listen wirst du immer die vollständige Liste, so unübersichtlich die am Ende auf werden mag, pflegen müssen.

> [@Crissov](#):
>
> den Rest verwirft. In manchen Sprachen funktionieren ODER-Ausdrücke so

Dass eine Logik-Funktion abbricht, sobald die erste Bedingung wahr geworden ist, mag die Laufzeit verkürzen. Ich bezweifele aber, dass dies hier in der Bearbeitung durch MP3tag zu Buche schlägt. Derzeit sind alle Logik-Funktionen ohne damit verbundene Ausgabe, so dass du auch mit $isempty() alle Variablen abfragen müsstest und dann eine zugehörige Reaktion definieren.

---

<div class="post-metadata">

### Author: ![Crissov](https://community.mp3tag.de/user_avatar/community.mp3tag.de/crissov/32/6619_2.png) [@Crissov](https://community.mp3tag.de/u/Crissov)
#### Post date: [March 11, 2026, 1:59pm UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/5 "2026-03-11T13:59:41Z")

</div>

> [@ohrenkino](#):
>
> Bei benutzerdefinierten Listen wirst du immer die vollständige Liste, so unübersichtlich die am Ende auf werden mag, pflegen müssen.

Deswegen schlage ich genau dafür ja eine neue Funktion vor, bspw. `$try(%field1%,%field2%,…)`, `$if3(%field1%,%field2%,…)` oder `$first(%field1%,%field2%,…)`.

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [March 11, 2026, 2:10pm UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/6 "2026-03-11T14:10:20Z")

</div>

> [@Crissov](#):
>
> Deswegen

Um ehrlich zu sein: ich verstehe die Begründung nicht.  
Während mit

> [@ohrenkino](#):
>
> [%feld1%][%feld2%][%feld3%]

eine Liste gegeben werden muss, ist die doch bei einer Funktion wie

> [@Crissov](#):
>
> `$try(%field1%,%field2%,…)`, `$if3(%field1%,%field2%,…)` oder `$first(%field1%,%field2%,…)`.

doch genauso nötig.  
Die Funktion mit den eckigen Klammern gibt es schon, die aus dem Vorschlag müsste hinzuentwickelt werden, ohne dass ich im Moment einen echten Nutzen sehen kann. Aber vielleicht bin ich auch einfach zu engstirnig und es fehlt mir die Weitsicht auf einen Anwendungsfall, in dem die eckigen Klammern nicht sinnvoll sind.

---

<div class="post-metadata">

### Author: ![Crissov](https://community.mp3tag.de/user_avatar/community.mp3tag.de/crissov/32/6619_2.png) [@Crissov](https://community.mp3tag.de/u/Crissov)
#### Post date: [March 12, 2026, 1:42pm UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/7 "2026-03-12T13:42:02Z")

</div>

Beim Sortieren mag es akzeptabel sein, mehrere Werte hintereinander zu erhalten, aber beim Umbenennen ist es z.B. nicht sinnvoll und manchmal wären sogar eckige Klammern in dieser Funktion hilfreich:

```auto
$if($eql(%compilation%,1),#,$try(%albumartistsort%,%albumartist%,%artistsort%,%artist%))$try([\%albumsort%\],[\%album%\],\)[$num(%discnumber%,1).]$num(%track%,2) $try(%titlesort%,%title%[, %subtitle%])[(%mixartist%)]

$if($eql(%itunesmediatype%,TV Show),Serien\$try(%tvshowsort%,%tvshow%,%albumsort%,%album%)\$try($if2(%tvepisodeid%,[%tvseason%.]%tvepisode%),#%track%) ,Filme\)$try(%titlesort%,%title%)[(%subtitle%)]

```

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [March 12, 2026, 1:51pm UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/8 "2026-03-12T13:51:42Z")

</div>

Wenn ich die Funktion richtig verstehe, soll also aus einer Liste von Feldern der erste gefundene Wert genommen werden, weil anscheinend nicht klar ist, welches der Felder gefüllt sein kann.  
Ist das so richtig?

Mit folgendem Ausdruck bekommst Du jeweils das 1. gefüllte Feld ausgegeben:  
`$regexp('==%feld1%==%feld2%==%feld3%==',=*(.+?)==.*,$1)`

---

<div class="post-metadata">

### Author: ![Crissov](https://community.mp3tag.de/user_avatar/community.mp3tag.de/crissov/32/6619_2.png) [@Crissov](https://community.mp3tag.de/u/Crissov)
#### Post date: [March 12, 2026, 2:23pm UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/9 "2026-03-12T14:23:58Z")

</div>

Ich persönlich nutze gerne reguläre Ausdrücke, aber das finde ich hier schon sehr unelegant. Ich kann mir das wie gesagt auch mit `$if2()` bauen, aber der Wunsch nach einer schönen, lesbaren Lösung ist halt doch da.

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [March 12, 2026, 3:12pm UTC](https://community.mp3tag.de/t/skriptfunktion-fur-erstes-nicht-leeres-feld/70851/10 "2026-03-12T15:12:50Z")

</div>

Ich gebe dir Recht, dass es

> [@Crissov](#):
>
> mit `$if2()`

recht unelegant ist, speziell, weil du ja aufpassen musst, nach dem ersten Treffer alle weiteren, die dann ggf. noch kommen können, zu ignorieren oder zu löschen, was dann ggf. weitere $if-Konstruktionen nach sich zieht.

Hast du meinen Vorschlag überhaupt ausprobiert?
