[Tustep-Liste] access loop

Kuno Sch�lkle Schaelkle at zdv.uni-tuebingen.de
Do Mai 4 09:21:09 CEST 2006


Lieber Herr Kollatz,

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Einen einzigen Fall deckt das Makro noch nicht ab,
.....
<Das>ö<z>stelle1</z> <zit>quelle1</zit>k<z>noch ne Stelle</z>ö</Das>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

ja, ich bin davon ausgegangen, dass <z> und <zit>
nicht mehrfach in einer Zeile vorkommen. Wenn es
nur einmal vorkommt, kann man die Daten zeilenweise
verarbeiten. Wenn es mehrfach vorkommt, ist es
am einfachsten, wenn man die Zeilen zusaetzlich
an <z> und <zit> unterteilt. Dadurch wird das Makro
sogar etwas kuerzer:

$$! quelle, ziel
$$=- {}
MODE VARIABLE

SET status = CHECK (quelle, READ, TUSTEP)
ERROR/STOP "QUELLE: ", status
SET status = CHECK (ziel, WRITE, TUSTEP)
ERROR/STOP "ZIEL: ", status

BUILD S_TABLE stop = ":<<z>>:<<zit>>:"

ACCESS q: READ/STREAM/RECORDS "{quelle}" s.z/u, aken+txt/stop+eken, typ
ACCESS z: WRITE/ERASE/STREAM  "{ziel}"   s.z/u, aken+txt+eken, nix

SET num = 0

LOOP/999999
   READ/EXIT q
   IF (SOR)  THEN
      IF (txt.SW."<Das>")  THEN
         SET num = num + 1
      ELSE
         SET num = 0
      ENDIF
   ENDIF
   IF (txt.EQ."<z>")  THEN
      SET mrk = num, nxt = mrk + 1
   ELSEIF (txt.EQ."<zit>")  THEN
      IF (#num.EQ.#mrk)  THEN
         SET txt = CONCAT (txt, mrk, ": ")
      ELSEIF (#num.EQ.#nxt)  THEN
         SET txt = CONCAT (txt, mrk, "f: ")
      ELSE
         SET txt = CONCAT (txt, mrk, "-", num, ": ")
      ENDIF
   ENDIF
   WRITE z
ENDLOOP

ENDACCESS q
ENDACCESS z

Naechste Portion lesen
Falls Portion am Satzanfang stand
    Falls Portion mit <Das> beginnt
        Lfd. Nummer der <Das>-Saetze erhoehen
    Andernfalls
         Lfd. Nummer zuruecksetzen
Falls <z> gelesen
     Lfd. Nummer merken, nachfolgende Nummer berechnen
Falls <zit> gelesen
     Falls lfd. Nummer == gemerkte Nummer
         1: ergaenzen
     Falls lfd. Nummer == auf gemerkte folgende Nummer
         2f: erzaenzen
     in allen anderen Faellen
         3-4: ergaenzen
Portion schreiben



Mehr Informationen über die Mailingliste Tustep-Liste