Handbuch-Beispiele als Test, search/seek mit Schlüsseltabelle

- doc/handbuch.txt: OCR-Text des COHERENT-/rdb-Handbuchs
- demo/handbuch/ und test/handbuch_test.rb: Beispiele aus dem Lehrbuchteil, mise run test führt sie mit aus
- search/seek: Schlüsselspalten aus dem Kopf der Schlüsseltabelle
- gregorian -u ohne führende Null im Monat, mean ganzzahlig ohne .00
- Mit justify aufgefüllte Spaltennamen werden wieder gefunden
- coherent.pdf in .gitignore
This commit is contained in:
wkh
2026-10-14 21:48:46 +02:00
parent a38311021d
commit df8bcdfaf1
49 changed files with 21167 additions and 16 deletions
+35 -5
View File
@@ -13,7 +13,7 @@ sind nach dem Handbuch neu geschrieben.
mise trust # einmal nach dem Clone: mise.toml freigeben
mise install # Ruby 3.4
mise run install # legt die Symlinks row, column, total ... in bin/ an
mise run test # 114 Tests
mise run test # 114 Tests und die Beispiele aus dem Handbuch
```
Ohne `mise trust` brechen in einem frisch geklonten Ordner alle `mise`-Befehle ab.
@@ -89,6 +89,28 @@ Eine Zeile mit `##` erscheint als Überschrift in der Ausgabe, eine mit `#` ist
ein stiller Kommentar. Neue Befehle brauchen hier ein Beispiel, sonst schlägt der Test
`test_testall_mentions_every_command` fehl.
## Beispiele aus dem gedruckten Handbuch
`doc/handbuch.txt` ist der Text des gedruckten Handbuchs „COHERENT /rdb Relational
Database Manager“ (Mark Williams, 346 Seiten), per OCR aus dem Scan `coherent.pdf`.
Er ist nicht korrigiert: Tabulatoren fehlen, Tabellen können verrutscht sein. Jede
Seite ist mit PDF- und Buchseite markiert (Buchseite = PDF-Seite − 10). Kapitel 1–16
sind ein Lehrbuch, Kapitel 17 enthält dieselben Man-Pages wie `man/`.
`demo/handbuch/` enthält die Beispiele aus dem Lehrbuch mit ihren Tabellen, ein
Unterordner je Kapitel. `beispiele.txt` hält zu jedem Beispiel den Befehl und die
Ausgabe, wie sie im Buch steht; `test/handbuch_test.rb` führt alles aus und vergleicht
(ohne Leerraum, das Buch richtet mit Leerzeichen aus). In der Datei bedeutet:
```
@ kap03 die folgenden Befehle laufen in diesem Unterordner
## S. 26 ... Überschrift mit Buchseite
$ befehl darunter die Ausgabe laut Buch
# ... Kommentar, z. B. ein Druckfehler des Buchs (die Ausgabe ist korrigiert)
! ... hier weichen wir bewusst ab; nicht verglichen, der Test meldet aber,
wenn die Ausgabe doch wieder zum Buch passt
```
## Vorlagen: `form` und `entry`
- `demo/form` ist eine Vorlage für `report` und `letter`: sie setzt Spaltenwerte in einen Text ein.
@@ -217,10 +239,16 @@ er nicht mehr passt (außer mit `-a`). Beide halten die Indizes aktuell.
## Unterschiede zum Original
- Es gibt kein COHERENT-Programmmaterial, daher sind die **Ausgaben nur anhand der
Man-Pages geprüft**, nicht gegen das echte /rdb. Die Beispiele aus dem
Handbuch sind als Tests enthalten (`test/rdb_test.rb`).
- Die Indexdateien haben ein eigenes, einfaches Format (das Original ist nicht
dokumentiert). Sie sind nicht mit alten /rdb-Dateien austauschbar.
Man-Pages und dem gedruckten Handbuch geprüft**, nicht gegen das echte /rdb. Die
Beispiele aus den Man-Pages sind als Tests enthalten (`test/rdb_test.rb`), die aus
dem Lehrbuch in `demo/handbuch/` (`test/handbuch_test.rb`).
- Die Indexdateien sind dem Original nachgebaut, aber nicht gleich (Handbuch S. 103–108):
die Hashtabelle `.h` hat 2n statt 2n+1 Plätze, und in `.i` steht der Schlüssel vor
dem Offset statt dahinter. Alte /rdb-Indizes muss man neu bauen.
- `sorttable` lässt Zeilen mit gleichem Schlüssel in ihrer Reihenfolge; das Original
ordnet sie nach der ganzen Zeile, wie `sort` (Handbuch S. 94).
- `subtotal` schreibt bei einer Summe von null ein leeres Feld; das Handbuch zeigt
`0` und die Kontonummern als `101.0` (S. 30).
- Spaltennamen unterscheiden wie im Original Groß- und Kleinschreibung. Mit
`RDB_ICASE=1` (z. B. in `mise.toml` unter `[env]`) wird sie ignoriert:
ein exakter Treffer gewinnt, mehrere ähnliche sind ein Fehler. In
@@ -252,6 +280,8 @@ lib/rdb/fast.rb Schnellzugriff über Byte-Offsets
lib/rdb/cmd/*.rb die Befehle, nach Gruppen
man/ Man-Pages (troff-Quellen aus den MWC-Archiven)
demo/ Beispieltabellen; testall.cmds = je ein Beispiel pro Befehl, testall.old = letzter Lauf
demo/handbuch/ die Beispiele aus dem gedruckten Handbuch, je Kapitel ein Ordner
doc/handbuch.txt Text des gedruckten Handbuchs (OCR)
test/ Tests
```