# Split

Der `-split` Operator in PowerShell wird verwendet, um einen String anhand eines Trennzeichens (Delimiter) in ein Array von Teilstrings aufzuteilen.

---

## 🧠 Syntax

```powershell
<string> -split <delimiter>

```

Oder mit erweiterten Optionen:

```powershell
<string> -split <delimiter>, <max-substrings>, <options>

```

---

## 📌 Grundlagen

- Gibt immer ein **Array (`System.String[]`)** zurück
- Der **Delimiter ist ein [regulärer Ausdruck](https://doku.borinas.com/books/webseiten-entwicklung/page/regularer-ausdruck-regex "Regulärer Ausdruck (RegEx)") (RegEx!)**, kein einfacher Text
- Groß-/Kleinschreibung kann beeinflusst werden

---

## 🔹 Beispiele

### Einfaches Splitten

```powershell
$text = "Apfel,Birne,Banane"
$result = $text -split ","

```

**Ergebnis:**

```powershell
Apfel
Birne
Banane

```

---

### Split mit Leerzeichen

```powershell
$text = "Das ist ein Test"
$result = $text -split " "

```

---

### Mehrere Trennzeichen (Regex)

```powershell
$text = "Apfel;Birne,Banane"
$result = $text -split "[,;]"

```

**Erklärung:**

- `[ , ; ]` bedeutet: splitte bei Komma **oder** Semikolon

---

### 💡 Verhalten bei `max-substrings`

Wenn die maximale Anzahl an Elementen erreicht ist:

> **Das letzte Element im Ergebnis enthält den gesamten verbleibenden Rest des Strings und wird nicht weiter gesplittet.**

```powershell
$text = "A,B,C,D"
$result = $text -split ",", 2

```

**Ergebnis:**

```powershell
A
B,C,D

```

**Erklärung:**

- Es werden maximal **2 Elemente** erzeugt
- Das erste Element entsteht durch den ersten Split
- Das zweite Element enthält **alles, was danach noch übrig ist** (`B,C,D`)

---

### 🧩Split mit Optionen

```powershell
$text = "a,b,c"
$result = $text -split ",", 0, "IgnoreCase"

```

#### Mögliche Optionen:

- `IgnoreCase`  
    → Groß- und Kleinschreibung wird ignoriert  
    → `"A,B,C" -split "a"` würde trotzdem funktionieren
- `CaseSensitive`  
    → Groß- und Kleinschreibung wird beachtet  
    → `"A,B,C" -split "a"` liefert **kein Ergebnis**, da kein Match
- `SimpleMatch`  
    → Der Delimiter wird **als normaler Text behandelt, nicht als Regex**  
    → Sonderzeichen wie `.`, `*`, `+` verlieren ihre Regex-Bedeutung
    
    Beispiel:
    
    ```powershell
    "1.2.3" -split ".", 0, "SimpleMatch"
    
    ```
    
    → funktioniert ohne Escape (`\.`)

---

## ⚠️ Wichtige Hinweise

### 1. Regex-Falle

```powershell
$text = "1.2.3"
$result = $text -split "."

```

**Problem:**  
`.` bedeutet im Regex „beliebiges Zeichen“

➡️ Ergebnis: komplett zerlegt

**Lösung:**

```powershell
$result = $text -split "\."

```

---

### 🗑 2. Leere Elemente

```powershell
"text,,text" -split ","

```

**Ergebnis:**

```powershell
text

text

```

**Erklärung:**

- Jeder Teilstring entsteht **zwischen zwei Trennzeichen (Delimiter)**
- Wenn zwei Delimiter direkt aufeinander folgen (`,,`), liegt dazwischen **kein Inhalt**
- PowerShell erzeugt dafür trotzdem ein Element im Array

> Dieses Element ist ein **leerer String (`""`)**, kein `null`

---

## 🔄 Alternative Methoden

### `.Split()` (kein Regex!)

```powershell
$text = "A,B,C"
$result = $text.Split(",")

```

**Unterschied zu `-split`:**

- `.Split()` verwendet **kein Regex**
- oft schneller und einfacher
- weniger flexibel

---

### `[regex]::Split()`

```powershell
[regex]::Split("A,B,C", ",")

```

➡️ Alternative mit explizitem Regex-Handling

---

## 🧩 Typische Anwendungsfälle

- CSV-Daten zerlegen
- Log-Dateien parsen
- Benutzereingaben aufteilen
- Pfade oder Listen verarbeiten

---

## 🧪 Mini-Beispiel aus der Praxis

```powershell
$csv = "Max;Mustermann;30"
$name = $csv -split ";"

$vorname = $name[0]
$nachname = $name[1]
$alter = $name[2]

```

---

## 🧠 Merksatz

> `-split` denkt in Regex. Wenn du das vergisst, bekommst du Chaos statt Struktur.