[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