[Tustep-Liste] Unerlaubte Zeichenfolge

Kuno Sch�lkle Schaelkle at zdv.uni-tuebingen.de
Mi Jul 13 17:43:26 CEST 2005


Lieber Herr Kollatz,

vermutlich kann das Problem am besten bewaeltigt werden,
wenn die Daten zuvor geprueft werden. Hier ein Makro, das
dafuer als Grundlage dienen kann. Beim Aufruf muss die Datei
mit den Standad-Eintraegen und die Datei mit den User-Eintraegen
angegeben werden. Die Variablen anz, num und cnt sind in
diesem Makro ohne weitere Bedeutung; sie muessen aber aus
syntaktischen Gruenden angegeben werden.

01: $$! std, usr
02: $$=- {}
03: MODE VARIABLE

04: SET status = CHECK (std, READ, TUSTEP)
05: ERROR/STOP "STD: ", status
06: SET status = CHECK (usr, READ, TUSTEP)
07: ERROR/STOP "USR: ", status

08: DICTIONARY test CREATE

09: SUBMACRO check
10: ! name, datei
11: ACCESS d: READ/RECORDS "{datei}" s.z/u, zeile, anz
12: LOOP/999999
13:    READ/NEXT d
14:    IF (EOF)  EXIT
15:    SET szu_neu = CONCAT (s, ".", z, "/", u)
16:    SET nix = SPLIT (zeile, ":~:", key, wert_neu)
17:    DICTIONARY test LOOKUP key, num, cnt, szu_alt, wert_alt
18:    IF (num.EQ.0)  THEN
19:       DICTIONARY test ADD key, num, cnt, szu_neu, wert_neu
20:    ELSEIF (wert_alt.EQ.wert_neu)  THEN
21:      + Wiederholung: STD {szu_alt} - {name} {szu_neu}
22:      +    {zeile}
23:    ELSE
25:      + Wiederspruch: STD {szu_alt} - {name} {szu_neu}
26:      +    {key}~{wert_alt}
27:      +    {zeile}
28:    ENDIF
29: ENDLOOP
30: ENDACCESS d
31: ENDSUBMACRO

32: CALL check ("STD-Datei", std)
33: CALL check ("USR-Datei", usr)
--------
04: STD-Datei prüfen
05: Makro ggf. mit Fehlermeldung beenden
06: USR-Datei prüfen
07: Makro ggf. mit Fehlermeldung beenden
08: Wörterbuch mit dem Namen test einrichten
09: Submakro mit dem Namen check definieren
10: Submakro hat die Spezifikationen name und datei
11: Datei zum Lesen öffnen
13: Zeile einlesen
14: Fertig, wenn alles gelesen
15: szn_neu = neue Seitenzeilennummer
16: Zeile zerlegen: key = Text vor ~, wert_neu = teil nach ~
17: Prüfen, ob key schon im Wörterbuch
19: Wenn nicht, hinzufügen
21: Fehlermeldung wenn schon vorhanden und identisch
25: Fehlermeldung wenn schon vorhanden und nicht identisch
30: Datei schließen
33: STD-Datei prüfen
33: USR-Datei prüfen

-------------------------------------------------------------------------
...
> In dieser Routine wird ein Standartwörterbuch
> "wortbuch.std" verwendet, in dem zB folgende Einträge stehen könnten:
>
> bird~Vogel
> cat~Katze
> dog~Hund
>
> Dieses Standartwörterbuch wird nun
> mit einem Nutzerwörterbuch "wortbuch.user" kombiniert. Hier sind neue,
> noch zu prüfende Einträge enthalten, die irgendwann einmal ins
> Standartwörterbuch integriert werden sollen.), z.B.:
>
> ant~Ameise
> dog~Hund
> elefant~Elephant
> horse~Pferd
> turtle~Schildkröte
>
....
> Falls nun ein Nutzer/eine Nutzerin - wie im obigen Beispiel - irrtümlich
> einen Eintrag aufnimmt, der schon im Standartwörterbuch drin steht,
> erscheint die obige Fehlermeldung (mit dem Verweis auf eine Satznummer).
...
> Es wäre nun schön, wenn ich die Möglichkeit hätte meinen Nutzern ihre
> Fehler vor Augen führen zu können, indem ich zB beide Einträge anzeigen
> könnte, etwa mit folgender Meldung:

> Der folgende Eintrag ist doppelt belegt:
> Im Standartwörterbuch wird
> "dog" mit "Hund" übersetzt
> im Nutzerwörterbuch wird
> "dog" mit "Hund" übersetzt.
>
> Dann wüsste mein Nutzer: "aha! ich habe aus was für Gründen auch immer,
> einen überflüssigen, den Programmablauf störenden Eintrag getätigt, ich
> muss also (m)einen Hund entfernen!"
>
> An dieser Stelle wäre es auch denkbar die Nutzerin überhaupt nicht mit
> dieser Meldung zu behelligen, sondern den fehlerhaften Nutzereintrag
> autoritär zu tilgen.
>
> Nur für den folgenden Fall, in dem eine andere Übersetzung eintragen ist
>
> dog~Köter
>
> wäre eine Meldung überhaupt sinnvoll, etwa:
>
> Für "dog" werden
> zwei Übersetzungen vorgeschlagen:
> "Hund" (std) und "Köter" (user)
> Welche Variante soll gelten?
>
> Verbunden mit einem schönen Wahlmenü,
> wäre die Sache dann schon recht sophisticated.
...



Mehr Informationen über die Mailingliste Tustep-Liste