(Hinweis des Webmasters: Leider noch nicht besonders schön formatiert, da der Artikel ursprünglich in einem anderem Format vorlag und ich noch keine Zeit hatte, ihn "umzubauen" :-)
Fehler:
Beim Aktualisieren des Registers für die c't 22/2004 kommt es
beim Lernen zur Meldung "Unerwarteten Fehler (285)!". Das Anhängen
der Update-Datei und das anschliessende Prüfen der FRM-Datei
läuft fehlerfrei.
Ursache ist der Eintrag für den Artikel
Sven Hansen: Antennengucker c't 22/2004, S. 172
dessen Liste der Schlagwörter mit 492 Zeichen zu lang ist.
Gemäss Hilfe [1] sieht die Struktur eines Datensatzes so aus:
1. Zeile: Titel (max. 80 Zeichen)
2. Zeile: Untertitel (max. 80 Zeichen)
3. Zeile: Autoren (max. 80 Zeichen)
4. Zeile: Redakteur (max. 3 Zeichen, linksbündig)
5. Zeile: Seite (max. 3 Zeichen, rechtsbündig)
6. Zeile: Ausgabe (max. 2 Zeichen, rechtsbündig)
7. Zeile: Zeitschrift, Jahrgang (1 Zeichen für Zeitschrift, 2 Zeichen
für Jahrgang)
8. Zeile: Querverweise (max. 80 Zeichen)
9. Zeile: Schlagwörter (max. 254 Zeichen)
In der Praxis sind (manchmal, nicht reproduzierbar!) bis zu 401
Zeichen Schlagwörter möglich. Wird die Liste der
Schlüsselwörter dann noch länger, kommt es auch zu
unsinnigen Fehlermeldungen beim Prüfen der FRM-Datei.
Die Länge anderer Zeilen scheint nicht zu stören. Bis c't
03/2005 beträgt die maximale Länge anderer Zeilen:
1. Zeile: 115 Zeichen
2. Zeile: 124 Zeichen
3. Zeile: 121 Zeichen
Idee / Workaround:
Den fehlerhaften Datensatz duplizieren und die
Schlüsselwörter aufteilen. Als Folge wird der Artikel danach
bei Suche ohne Schlüsselwörter mehrfach gefunden.
Im weiteren Verlauf stellt sich aber heraus, dass solche
Überlängen häufiger auftreten. Es ist also angebracht,
ein Programm "HeiseFix" für das Aufteilen der Datensätzte zu
schreiben.
Neuer Ablauf beim Update:
Die Schritte zum Update des Registers sind dann:
1. Alte Datei sichern:
Bei erstem Upgrade alte FRM-Datei sichern:
REN ctab2002.frm ctab2002.bup
Bei allen weiteren Updates alte NEW-Datei sichern:
REN ctab2002.new ctab2002.bup
2. Neue Update-Dateien anhängen:
COPY ctab2002.bup+ctin0422.cti+ctin0423.cti+..+ctin0426.cti ctab2002.new
3. Aus dem neuen Gesamtverzeichnis die FRM-Datei generieren:
heisefix ctab2002.new ctab2002.frm
4. Heise-Register für OS/2 starten und die FRM-Datei erst prüfen, dann
lernen lassen.
Vorteil dieses Vorgehens ist, dass man eine Datei hat, die keine
doppelten Sätze enthält; ein Split ist eben einfacher gemacht
als ein Union. Die FRM-Datei für das Heise-Register wird dann nach
jedem Update aus dem "Original" (hier .new) mit HeiseFix generiert.
Zum Programm HeiseFix:
Das Programm darf frei kopiert und benutzt werden, es gilt die GPL
(http://agnes.dida.physik.uni-essen.de/~gnu-pascal/gpl-ger.html). Es
kann mit Borland-Pascal 7.0 übersetzt werden, wenn gewünscht
werden mit den c't-Patches [2,3] auch OS/2-Exe-Dateien erzeugt. Die so
übersetzten Programme können nur mit 8.3-Dateinamen umgehen.
Das Programm korrigiert nur die Überlänge der
Schlüsselwörter. Die Länge anderer Zeilen wird zwar
geprüft und ggf. kritisiert aber nicht geändert. Existierende
Original-Datei und neu zu erzeugende korrigierte Datei müssen
verschieden sein. Sonst wird die Original-Datei gelöscht.
In dem obigen Beispiel gibt HeiseFix aus:
HeiseFix Version 1.0alpha1 Autor: W. Bockey
Korrekur fuer Heise-Register unter OS/2
Original file: ctab2002.new
Corrected file: ctab2002.frm
RecNo 1234 Idx 2 Line 11108 Err 2: String too long 87> 80
RecNo 1276 Idx 3 Line 11487 Err 2: String too long 88> 80
RecNo 1277 Idx 3 Line 11496 Err 2: String too long 121> 80
...
RecNo 7237 Idx 2 Line 65135 Err 2: String too long 83> 80
RecNo 7390 Idx 9 Line 66519 Err 2: String too long 297>254
RecNo 7432 Idx 9 Line 66897 Err 2: String too long 302>254
...
Dabei bedeuten:
RecNo: Nummer des Datensatzes, Zählung ab 0
Idx: Nummer der Zeile innerhalb des Datensatzes, Zählung ab 1
Line: Zeilennummer in Original-Datei, Zählung ab 1
Err: Nummer des Fehlers, Fehlertext und ggf. tatsächliche und
erlaubte Länge
Bsp. 1: "RecNo 1234 Idx 2 Line 11108 Err 2: String too long 87> 80"
Datensatz Nummer 1234
Zeile 2 des Datensatzes (Untertitel)
Zeile 11108 in Datei
Fehler: Zeichenkette ist zu lang. Tatsächliche Länge 87
Zeichen. Maximal erlaubte Länge: 80 Zeichen.
Dieser Fehler wird nicht korrigiert, da es sich nicht um die
Schlüsselwörter handelt.
Bsp. 2: "RecNo 7390 Idx 9 Line 66519 Err 2: String too long 297>254"
Datensatz Nummer 7390
Zeile 9 des Datensatzes (Schlüsselwörter)
Zeile 66519 in Datei
Fehler: Zeichenkette ist zu lang. Tatsächliche Länge 297
Zeichen. Maximal erlaubte Länge: 254 Zeichen.
Dieser Fehler wird korrigiert indem der Datensatz dupliziert wird und
die Schlüsselwörter auf die beiden Datensaetze verteilt
werden.
Download:
Download hier (http://bockey.teamos2trier.de/MB_DOS2/HEISEFIX.LZH).
Datei HeiseFix.OS2 oder HeiseFix.DOS nach HeiseFix.Exe umbenennen.
Alternativen zum Heise-Register:
* HTTP-Daemon von c't-ROM / c't-plus-ROM:
Nachteil ist, dass man meines Wissens das Register nicht akutalisieren
kann. Im verwendeten Register sind aber alle Artikel bis zur letzten
Ausgabe auf der CD enthalten.
* Online-Suche auf http://www.heise.de (http://www.heise.de).
Literatur:
[1] Hilfe des Heise-Registers
[2] Matthias Withopf:
Winderkind, Borland Pascal lernt die OS/2-Programmierung
c't 11/1993 S. 240-246
[3] Stefan Krude:
Besser gepatcht (Leserbrief zu [2])
c't 12/1993 S. 8