[Tustep-Liste] TUSTEP erweitern, vereinfachen: Tags in Makro

Paul Sappler paul.sappler at uni-tuebingen.de
Tue Dec 7 12:04:54 CET 2004


Sehr verehrte Runde, lieber Herr Schälkle,
die Lösung des Problems, unspezifische Schlußklammern zu
differenzieren entsprechend den öffnenden Klammern, und zwar mittels
Makro, finde ich sehr elegant. Weil ich nicht alles verstanden habe,
möchte ich Fragen stellen. Dazu darf ich einen Teil von Herrn
Schälkles Text wiederholen, auch wenn einige dieses Wiederholen, wenn
es prinzipiell gemacht wird, stört.

> 01: $$! quelle, ziel
> 02: $$=- []
> 03: MODE VARIABLE
>
> 04: SET status = CHECK (quelle, READ, TUSTEP)
> 05: ERROR/STOP status
> 06: SET status = CHECK (ziel, WRITE, TUSTEP)
> 07: ERROR/STOP status
>
> 08: BUILD S_TABLE atab = ":{\it :{\bf :"
> 09: BUILD S_TABLE etab = ":}:"
> 10: BUILD X_TABLE xtab = ":{\it :<<i>>:{\bf :<<b>>:"
>
> 11: ACCESS q: READ/STREAM/RECORDS "[quelle]" s.z/u,
aken/atab+txt+eken/etab, typ
> 12: ACCESS z: WRITE/ERASE/STREAM "[ziel]" s.z/u, aken+txt+eken, anz
>
> 13: SET tags = ""
>
> 14: LOOP
> 15:    READ q
> 16:    IF (EOF)  EXIT
> 17:    IF (aken.NE."")  THEN
> 18:       SET aken = EXCHANGE (aken, xtab)
> 19:       SET tags = INSERT (tags, 1, aken)
> 20:    ENDIF
> 21:    IF (eken.NE."")  THEN
> 22:       SET tags = REMOVE (tags, 1, tag)
> 23:       SET eken = END_TAG (tag)
> 24:    ENDIF
> 25:    WRITE z
> 26: ENDLOOP
>
> 27: ENDACCESS q
> 28: ENDACCESS z
>
> 04: Quelldatei prüfen
> 05: Makro ggf. mit Fehlermeldung beenden
> 06: Zieldatei prüfen
> 07: Makro ggf. mit Fehlermeldung beenden
> 08: Tabelle mit den Anfangskennungen
> 09: Tabelle mit den Endekennungen
> 10: Tabelle Anfangskennungen --> Anfangstags
> 11: Quelldatei öffnen
> 12: Zieldatei öffnen
> 13: Variable tags = "", d.h. keine Tags offen
> 15: aken+text+eken einlesen
> 16: Wenn Dateiende erreicht: fertig
> 17: Wurde eine Anfangskennung gelesen?
> 18: Anfangskennung gegen entspr. Tag austauschen
> 19: Tag in der Variablen tags merken
> 21: Wurde eine Endekennung gelesen?
> 22: Jeweils aktuelles Tag nach tag und in tags löschen
> 23: Aus dem Tag entspr. Endetag bilden
> 25: eken+text+eken ausgeben
> 27: Quelldatei schließen
> 28: Zieldatei schließen

- Zu 11: read zerlegt also dann den Record gemäß atab und etab und
speichert die gefundenen Kennungen nach aken und eken?
- Zu 12/25: Mit write wird dann doch jeder Teil txt ausgegeben, nicht
die ursprünglichen Satzeinheiten? Woher sollten die auch bekannt sein.
Muß dann nicht auch die Numerierung der Sätze geregelt sein, z.B. wie
in Kopiere mit modus=- oder -std- oder einzeln? Oder werden die
Satznummern wieder zum Zusammensetzen verwendet? Was aber z.B. mit der
Ausgabe von RV, wo nach dem Zerlegen die Einzelwörter eines Satzes die
gleiche Satznummer haben und haben sollen?
- Zu 22: Aha, im dritten Parameter von REMOVE wird also dann der
beseitigte Wert zurückgegeben, hübsch.
- Zu 23: END_TAG ist neu, Slash in <...> an zweiter Stelle einfügen
(vermutlich auch "Attribute wegnehmen")?
- Zu 19/22: Die Anfangstags werden in tag aufgehoben, die letzte vorn.
Wenn die Daten nicht sicher in Ordnung sind, wäre vielleicht die
umgekehrte Folge besser, weil man dann leichter reagieren kann, also:
13: SET tags = "", ntag=0
18a:      SET ntag = <ntag>+1
19:       SET tags = INSERT (tags, ntag, aken)
22:       SET tags = REMOVE (tags, ntag, tag), ntag = <ntag>-1
- Zu 11 ganz vorläufig: Man könnte die Eingabe gleich zur Analyse
komplexer Zeichenfolgen verwenden, so einfach wie man die Kennungen
abfragen kann. Wäre so etwas nicht auch unabhängig von der Eingabe
erwünscht?

Ich finde die neuen Makro-Möglichkeiten sehr gut. Es treibt mich aber
noch die Sorge um, Makro könnte dabei wesentlich langsamer sein als
Kopiere; oder ist das prähistorisch gedacht?
Mit besten Grüßen in die Runde
Paul Sappler


More information about the Tustep-Liste mailing list