feat: content import system - Markdown parser, importer, 7 decks + 3 tutorials + 5 cheatsheets

Dieser Commit ist enthalten in:
hafroese 2026-04-02 23:09:27 +02:00
Ursprung 1c59b667f2
Commit 6a504254b0
17 geänderte Dateien mit 2658 neuen und 0 gelöschten Zeilen

Datei anzeigen

@ -0,0 +1,166 @@
# Flashcard Deck: Listen & Rows
**Thema**: Omnis Listen - der universelle Datencontainer
**Schwierigkeit**: Anfaenger -> Fortgeschritten
**Karten**: 20
---
## Karte 1 | Basis
**Q:** Was ist eine "List" in Omnis?
**A:** Ein zweidimensionaler Datencontainer mit benannten, typisierten Spalten und beliebig vielen Zeilen. Wie ein Array von Objects in JS, ein DataFrame in Python, oder ein RecordSet in VB.
---
## Karte 2 | Basis
**Q:** Was ist eine "Row" in Omnis?
**A:** Eine einzelne Datenzeile mit benannten Spalten. Wie ein Object/Dictionary. Eine List besteht aus vielen Rows.
---
## Karte 3 | Basis
**Q:** Wie erstellst du eine Liste mit Spalten?
**A:**
```omnis
Do lList.$cols.$add('id', kInteger)
Do lList.$cols.$add('name', kCharacter, kSimplechar, 100)
Do lList.$cols.$add('price', kNumber, k2dp, 10)
```
---
## Karte 4 | Basis
**Q:** Wie fuegst du eine Zeile zu einer Liste hinzu?
**A:**
```omnis
Do lList.$add()
Calculate lList.id as 1
Calculate lList.name as "Produkt A"
Calculate lList.price as 29.99
```
`$add()` fuegt eine Zeile hinzu UND macht sie zur aktuellen Zeile.
---
## Karte 5 | Basis
**Q:** Wie iterierst du ueber alle Zeilen einer Liste?
**A:**
```omnis
For each line in list from 1 to lList.$linecount step 1
# lList.spaltenname gibt den Wert der aktuellen Zeile
Calculate lTotal as lTotal + lList.price
End For
```
---
## Karte 6 | Mittel
**Q:** Wie suchst du in einer Liste?
**A:** `Do lList.$search(lList.name = "Produkt A")` - Setzt `$line` auf den Treffer. `If flag true` prueft ob gefunden.
---
## Karte 7 | Mittel
**Q:** Wie sortierst du eine Liste?
**A:** `Do lList.$sort(lList.name, kTrue)` - Sortiert nach Spalte "name". `kTrue` = aufsteigend, `kFalse` = absteigend.
---
## Karte 8 | Mittel
**Q:** Wie entfernst du eine Zeile aus einer Liste?
**A:** `Do lList.$remove(lList.$line)` entfernt die aktuelle Zeile. `Do lList.$remove(3)` entfernt Zeile 3. `Do lList.$clear()` leert alle Zeilen.
---
## Karte 9 | Mittel
**Q:** Was ist `$linecount`?
**A:** Die Anzahl der Zeilen in einer Liste. `Calculate lAnzahl as lList.$linecount`. Wie `array.length` in JS.
---
## Karte 10 | Mittel
**Q:** Was ist `$line`?
**A:** Die aktuelle Zeilennummer einer Liste (1-basiert!). Wird durch `$search`, `$add`, Klick auf Grid gesetzt. `0` = keine Zeile gewaehlt.
---
## Karte 11 | Mittel
**Q:** Wie liest du eine bestimmte Zeile (nicht die aktuelle)?
**A:** `Calculate lVal as lList.[3].name` liest Spalte "name" von Zeile 3. Die eckigen Klammern addressieren die Zeilennummer.
---
## Karte 12 | Fortgeschritten
**Q:** Was macht `$sendall()`?
**A:** Fuehrt einen Ausdruck fuer JEDE Zeile der Liste aus (wie `forEach` + `map` in einem):
```omnis
Do lList.$sendall($ref.price.$assign($ref.price * 1.19))
```
`$ref` = aktuelle Zeile.
---
## Karte 13 | Fortgeschritten
**Q:** Wie filterst du eine Liste?
**A:** `$search` mit `kTrue` im 2. Parameter zeigt nur Treffer:
```omnis
Do lList.$search(lList.status = 'active', kTrue)
```
Nicht-Treffer werden "ausgeblendet" (nicht geloescht). `Do lList.$search(kTrue)` zeigt wieder alle.
---
## Karte 14 | Fortgeschritten
**Q:** Was ist der Unterschied zwischen `$merge()` und `$add()`?
**A:** `$add()` fuegt eine leere Zeile hinzu. `$merge(lOtherList)` fuegt ALLE Zeilen einer anderen Liste hinzu - wie `array.concat()` in JS.
---
## Karte 15 | Fortgeschritten
**Q:** Wie definierst du eine Liste aus einer Schema-Klasse?
**A:** `Do lList.$definefromsqlclass('scMySchema')` - Uebernimmt die Spaltenstruktur aus dem Schema. Wie ein Typ/Interface fuer die Liste.
---
## Karte 16 | Fortgeschritten
**Q:** Was ist `$colcount`?
**A:** Die Anzahl der Spalten einer Liste. `Calculate lCols as lList.$colcount`. Fuer dynamische Listen nuetzlich.
---
## Karte 17 | Fortgeschritten
**Q:** Wie kopierst du eine Liste?
**A:** `Calculate lCopy as lOriginal` erstellt eine **Kopie** (nicht Referenz!). Omnis-Listen sind Value-Types, nicht Reference-Types wie in JS!
---
## Karte 18 | Fortgeschritten
**Q:** Wie befuellst du eine Liste aus SQL?
**A:**
```omnis
Do lStmt.$execdirect('SELECT * FROM orders') Returns #F
If flag true
Do lStmt.$fetch(lList, kFetchAll) Returns #F
End If
```
`kFetchAll` holt alle Zeilen auf einmal.
---
## Karte 19 | Fortgeschritten
**Q:** Was ist `$selected` bei einer Liste?
**A:** Ein Boolean-Flag pro Zeile, das anzeigt ob die Zeile "ausgewaehlt" ist (z.B. per Checkbox im Grid). `lList.$selected` liest/setzt den Wert der aktuellen Zeile.
---
## Karte 20 | Fortgeschritten
**Q:** Was ist der Unterschied zwischen Listen und Rows beim SQL-Fetch?
**A:** `$fetch(lList, kFetchAll)` holt mehrere Zeilen in eine Liste. `$fetch(lRow, kFetchOne)` holt nur eine Zeile in eine Row. Row = einzelner Datensatz, Liste = Ergebnismenge.
---
## Spaced Repetition Tracking
| Karte | Zuletzt | Naechste | Schwierigkeit |
|-------|---------|----------|---------------|
| (wird beim Ueben gefuellt) | | | |