[Tustep-Liste] access loop

Kuno Sch�lkle Schaelkle at zdv.uni-tuebingen.de
Di Mai 2 14:51:23 CEST 2006


Lieber Herr Kollatz,

das folgende Makro sollte Ihr Problem loesen.
Das Makro geht allerdings davon aus, dass die
Daten in Ordnung sind. Besser waere wohl,
wenn man zur Sicherheit noch Abfragen einfuegt,
damit inkonsistente Daten erkannt werden.

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

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

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

SET num = 0

LOOP/999999
   READ/NEXT/EXIT q
   IF (txt.SW."<Das>")  THEN
      SET num = num + 1
      IF (txt.NC.":<<z>>:")  CONTINUE
      SET mrk = num, nxt = mrk + 1
      LOOP
         IF (txt.CT.":<</z>>:")  EXIT
         WRITE z
         READ/NEXT q
         SET num = num + 1
      ENDLOOP
      IF (#num.EQ.#mrk)  THEN
         SET erg = CONCAT (mrk, ": ")
      ELSEIF (#num.EQ.#nxt)  THEN
         SET erg = CONCAT (mrk, "f: ")
      ELSE
         SET erg = CONCAT (mrk, "-", num, ": ")
      ENDIF
      SET apos = SEARCH (txt, ":<<zit>>:", 0, 0, 1, epos)
      SET txt = SUBSTITUTE (txt, -, #epos, #epos, erg)
   ELSE
      SET num = 0
   ENDIF
   WRITE z
ENDLOOP

ENDACCESS q
ENDACCESS z


Naechsten Satz lesen
Falls Satz mit <Das> beginnt:
    Lfd. Nummer der <Das>-Saetze erhoehen
    Falls kein <z> vorhanden, fertig, Satz schreiben
    Lfd. Nummer von <z> merken, nachfolgende Nummer berechnen
       Falls Satz </z> enthaelt, Schleife verlassen
       Satz schreiben
       Naechsten Satz lesen
       Lfd. Nummer erhoehen
    Falls lfd. Nummer == gemerkte Nummer
       1: ergaenzen
    Falls lfd. Nummer == auf gemerkte folgende Nummer
       2f: erzaenzen
    in allen anderen Faellen
       3-4: ergaenzen
    Postion nach <zit> feststellen
    Nach <zit> einfuegen
Falls Satz nicht mit <Das> beginnt:
    Lfd. Nummer zuruecksetzen
Satz schreiben

================================================
Liebe Tustep-Gemeinde,
ich habe ein Problem, an dem ich schon eine Weile knobbele und trotzdem
nicht weiterkomme. In strukturierten Daten (s.u) will ich zählen und
schreiben. Gezählt werden soll im wievielten <Das>-Satz eine
<z>-Stelle anfängt und wo sie aufhört </z>. Diese Werte sollen
anschließend der Quelle zugewiesen werden <Zit>von-bis: ...</Zit>.
(Ich hoffe, ich habe mich nicht vertippt):

Quelle
 2.0 <Num>0002</Num>
 2.1 <Was>öadf</Was>
 2.2 <Was>öbdf</Was>
 2.3 <Was>öcdf</Was>
 2.4 <Das>dfasd</Das>
 2.5 <Das>df<z>stelle1<z> <zit>quelle1</zit>asd</Das>
 2.6 <Das>dfasd</Das>
 2.7 <Usw>ölkasd</Usw>
 4.0 <Num>0004</Num>
 4.1 <Was>asdasfasdfas</Was>
 4.2 <Was>jkjlkasdflöasf</Was>
 4.3 <Was>kajsdflkasdfk</Was>
 4.4 <Was>asdasfasdfas</Was>
 4.5 <Was>jkjlkasdflöasf</Was>
 4.6 <Was>kajsdflkasdfk</Was>
 4.7 <Was>asdasfasdfas</Was>
 4.8 <Was>jkjlkasdflöasf</Was>
 4.9 <Das>ö<z>stelle1</z> <zit>quelle1</zit>kö</Das>
 4.10<Das>ökdsöfjaölsdjföf</Das>
 4.11<Das>asdkfjö<z>stel</Das>
 4.12<Das>le2</z>, <zit>quelle2</zit>sdf</Das>
 4.13<Das>öökjölkj</Das>
 4.14<Das>asdf<z>stelle</Das>
 4.15<Das>immer noch stelle</Das>
 4.16<Das>nr 3</z> <zit>quelle3</zit> ööasdf</Das>
 4.17<Usw>ö1öö</Usw>
 4.18<Usw>ö2öö</Usw>
 4.19<Usw>ö3öö</Usw>
70.0<Num>0070</Num>
70.1...

ZIEL
2.0 = 2.0
2.1 = 2.1
2.2 = 2.2
2.3 = 2.3
2.4 = 2.4
2.5 = <Das>df<z>stelle1<z> <zit>2-2: quelle1</zit>asd</Das>
2.6 = 2.6
...
4.9 = <Das>ö<z>stelle1</z> <zit>1-1: quelle1</zit>kö</Das>
4.10= <Das>ökdsöfjaölsdjföf</Das>
4.11= <Das>asdkfjö<z>stel</Das>
4.12= <Das>le2</z>, <zit>3-4: quelle2</zit>sdf</Das>
4.13= <Das>öökjölkj</Das>
4.14= <Das>asdf<z>stelle</Das>
4.15= <Das>immer noch stelle</Das>
4.16= <Das>nr 3</z> <zit>6-8: quelle3</zit> ööasdf</Das>
4.17= <Usw>ö1öö</Usw>
...

Schön wäre dann noch:
IF (von .eq. bis) THEN
2.5 = <Das>df<z>stelle1<z> <zit>2: quelle1</zit>asd</Das>
4.9 = <Das>ö<z>stelle1</z> <zit>1: quelle1</zit>kö</Das>
ELSEIF (bis .eq. von+1) THEN
4.12= <Das>le2</z>, <zit>3f: quelle2</zit>sdf</Das>
ENDIF



Mehr Informationen über die Mailingliste Tustep-Liste