Die resultierenden XML-Dateien können von der aktuellen KTouch-Version (19.12.3) nicht mehr verarbeitet werden aufgrund des geänderten Formats. Um SortWords weiter zu verwenden, muss zuerst das Outputformat angepasst werden.
SortWords ist ein Bash-Skript, dass eine Liste von Wörtern nach ihren auftretenden Buchstaben sortiert. Damit können Buchstaben in KTouch-Lektionen der Reihe nach eingeführt werden und in jeder Stufe nur die Wörter abgefragt werden, deren Buchstaben bereits bekannt sind.
Alle Dateien befinden sich im Repository unter [ktouch/tools/sortWords](https://git.neo-layout.org/neo/neo-layout/src/branch/master/tipptrainer/ktouch/sortWords). Dabei sind nur folgende Dateien zum Ausführen notwendig:
* [in.txt](https://git.neo-layout.org/neo/neo-layout/raw/branch/master/tipptrainer/ktouch/sortWords/in.txt) - Eine beliebige Textdatei mit den zu sortierenden Wörtern.
* [key.conf](https://git.neo-layout.org/neo/neo-layout/raw/branch/master/tipptrainer/ktouch/sortWords/key.conf) - Konfigurationsdatei mit der Reihenfolge der Buchstaben
* [sortWords.sh](https://git.neo-layout.org/neo/neo-layout/raw/branch/master/tipptrainer/ktouch/sortWords/sortWords.sh) - Das Skript selbst
Zum Einrichten lässt sich einerseits die Eingabedatei `in.txt` beliebig wählen. Sie enthält die zu sortierenden Wörter und muss UTF-8 kodiert sein. Die Wörter müssen durch eine beliebige Anzahl von Whitespacezeichen (also Windows-Zeilentrennzeichen, Linux-Zeilentrennzeichen, Leerzeichen, Tabulator, ...) von einander getrennt sein. Die Datei im Repository enthält die 10.000 häufigsten Wörter der deutschen Sprache.
Zum anderen lässt sich über die Datei `key.conf` die Reihenfolge der in der KTouch-Lektion zu erlernenden Buchstaben festlegen. Zum editieren der Datei sind in ihr einige Kommentare als Hilfe gestellt. Die vorgegebene Datei ist auf die [1.Ebene](https://www.neo-layout.org/Benutzerhandbuch/Tastaturbelegung/#ebene-1) der Neo2-Tastaturbelegung eingestellt.
-k berücksichtige nur komplett klein geschriebene Worte
-w wandle alle Worte in klein-schreibeise um. Setzt automatisch die Option '-k'
-e entfernt doppelt vorkommende Worte und sortiert dabei die Ergebnisliste nach
dem Alphabet. Empfehlenswert in Verbindung mit der Option '-w', da hierbei zwei
gleiche Worte auftreten können, die sich zuvor durch Groß/kleinschreibung
unterschieden haben
-f:<SPALTEN> faltet die Ausgabedatei "out.txt" nach der angegebenen Anzahl von
Spalten. Standard=80
-z:<ZEILEN> maximale Anzahl an Zeilen pro Trainings-Lektion-Stufe.
(WARNUNG: Ausführung dauert sehr lange!)
Beispiel: ./sortWords.sh -w -e -z:4
```
Bei den Optionen ist zu beachten:
*`-f` bestimmt die maximale Zeilenlänge in jeder Stufe. Sofern `-f` nicht angegeben ist, wird das Skript mit dem Standardwert `-f:80` ausgeführt
* Ohne der Option `-z` wird pro Stufe genau ein neuer Buchstabe eingeführt. Dadurch kann aber bei einer Eingabeliste von vielen Tausend Wörtern schnelle eine Stufe der Lektion aus mehreren Hundert Wörtern bestehen. Mit `-z:<ZEILE>` wird die maximale Anzahl an Zeilen pro Stufe begrenzt auf `<ZEILE>`. Die Ausführung des Skriptes dauert mit dieser Option unverhältnismäßig lange, da sie schlecht implementiert ist (ich habe es halt nicht besser hinbekommmen ;-) )
## Ausführen
Es wird der in der Hilfe angegebene Beispiel-Aufruf ausgeführt:
```
Beispiel: ./sortWords.sh -w -e -z:4
```
mit den Logmeldungen:
```
Zeichenreihenfolge wird geladen: Aus Datei "key.conf"...OK
Quelldatei "in.txt" wird eingelesen...OK
Wörter gesamt = 10170
Formatiere den Quelltext...OK
Nach dem Filtern bleiben 9204 Wörter übrig.
Buchstaben | Anzahl der neuen Wörter
=====================================
en | 3
ar | 9
ud | 54
it | 141
l | 109
g | 281
c | 10
h | 318
o | 180
s | 926
w | 376
k | 476
p | 367
m | 803
z | 492
b | 1163
ä | 441
, | 0
v | 653
f | 1109
ö | 245
. | 0
x | 51
q | 22
ü | 514
j | 165
ß | 216
y | 80
Falte die Datei "out.txt" nach spätestens 80 Spalten...OK
Trainings-Lektions-Stufen werden auf 4 Zeilen begrenzt............................OK
Erstelle KTouch-Lektion "out.ktouch.xml"...OK
```
In Verbindung mit den beiden vorgegebenen Dateien `in.txt` und `key.conf` erstellt das Skript die bereits im Repository hinterlegten Ausgabedateien:
* [out.txt](https://git.neo-layout.org/neo/neo-layout/raw/branch/master/tipptrainer/ktouch/sortWords/out.txt) - Die sortierten Wörter in einem Klartextformat
* [out.ktouch.xml](https://git.neo-layout.org/neo/neo-layout/raw/branch/master/tipptrainer/ktouch/sortWords/out.ktouch.xml) - Die sortierten Wörter als KTouch-Lektion
* Durch die Option `-w` wurden alle Wörter in kleinschreibweise umgewandelt, damit zum vereinfachten Lernen von Neo2 der Fokus auf den neu positionierten Buchstaben liegt.
* Die Eingabeliste `in.txt` ist nicht besonders gut bearbeitet. Es wiederholen sich ständig Wörter. Mit der Option `-e` werden die doppelten Einträge entfernt und die Liste (als Nebeneffekt) nach dem Alphabet sortiert. Dadurch werden Worte mit ähnlichem Anfang direkt hintereinander getippt. Beispiel:
```
trage tragen training traurig
```
Als Vorteil prägt man sich beim Schreiben die zu tippende Buchstabenfolge besser ein.
* Mit der Option `-z:4` wird verhindert, dass eine Stufe aus mehreren Hundert Wörtern bestehen kann. Pro Stufe sind also 4 Zeilen zu je höchstens 80 Zeichen erlaubt. Das bläht die Lektion auf annährend 300 Stufen auf.