[Tustep-Liste] Unerlaubte Zeichenfolge

Thomas Kollatz t.kollatz at steinheim-institut.de
Di Aug 16 10:32:02 CEST 2005


Lieber Herr Schälkle, 
entschuldigen Sie bitte, dass ich mich erst jetzt rückmelde, aber ein unerwarteter "Sommerurlaub auf 
Bronchitis" hat mich längere Zeit vom Schreibtisch ferngehalten.
Vielen Dank für den interessanten Lösungsvorschlag, der weitreichende Möglichkeiten bietet.
Mir ging es ja zunächst nur um die Möglichkeit auf eine Satznummer, die innerhalb einer 
Fehlermeldung ("unerlaubte Zeichenfolge") ausgegeben wird zugreifen zu können. 
Wenn ich es richtig sehe, habe ich jetzt ein in "Makros" integriertes Vergleiche bekommen.

Die Makroanweisungen "Dictionary ... CREATE", "Dictionary ... LOOKUP" und Dictionary ... ADD" sind 
neu und noch nicht dokumentiert, oder?

Ich werde das Programm nächstens ausführlich testen.

Herzliche Grüsse
THOMAS KOLLATZ

Am 13.07.2005 17:43:26, schrieb "Kuno Schälkle" <Schaelkle at zdv.uni-tuebingen.de>:

>Diskussionsforum Tustep-Liste
>Weitere Informationen: www.itug.de
>------------------------------------------------------------
>
>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 Standard-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:      + Widerspruch: 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.
>...
>
>------------------------------------------------------------
>Tustep-Liste at itug.de
>https://lists.uni-wuerzburg.de/mailman/listinfo/tustep-liste
>

-- 
drs Thomas Kollatz - wissenschaftlicher Mitarbeiter / research assistant
Salomon Ludwig Steinheim-Institut fuer deutsch-juedische Geschichte
D - 47057 Duisburg, Geibelstrasse 41, Tel: 49-203-370071
www.steinheim-institut.de/das_institut/mitarbeiter/kollatz/index.xml



Mehr Informationen über die Mailingliste Tustep-Liste