[Tustep-Liste] Einfügen von tags - Erläuterung

Barbara Jockers Barbara.Jockers at uni-wuerzburg.de
Mo Jun 29 11:27:25 CEST 2009


Lieber Herr Schälkle,

hier endlich mein verspäteter Dank an Sie! Sie haben mit diesem Makro  
erfolgreich meine auf Deutsch formulierten Gedanken in TUSCRIPT  
übersetzt!

Die Frage war, wie man zusätzliche tags in Dateien einfügt, wenn

a) das neu einzufügende Anfangstag nicht immer vor demselben  
untergeordneten Tag zu stehen kommt (im Beispiel: nach dem  
einzufügenden übergeordneten Tag <lv> kann in den Daten "<koi  
type="lv">...</koi> <bel>" oder direkt "<bel>" folgen).

b) wenn man nicht weiß, wie oft das untergeordnete Tag sich  
wiederholt, bevor das einzufügende übergeordnete schließende Tag kommt  
(im Beispiel: </gram>, </lv>)

c) das letzte schließende Tag einer untergeordneten Struktur vor dem  
Dateiende bzw. übergeordneten schließenden Tags einzusetzten ist (im  
Beispiel: </eintrag>)

Mit diesen Erläuterungen ist die Lösung hoffentlich auch für andere  
tuscript-Anfänger hilfreich.

Viele Grüße in die Runde,
Ihre Barbara Jockers


> ------------------------------------------------------
>
> $$! quelle, ziel
> $$-
> $$ MODE TUSCRIPT
>
> SET status = CHECK (quelle, READ, TUSTEP)
> ERROR/STOP "QUELLE: ", status
>
> SET status = CHECK (ziel, WRITE, TUSTEP)
> ERROR/STOP "ZIEL: ", status
>
> SET status = UNIQUE (quelle, ziel)
> ERROR/STOP "Datei ", status, " ist mehrfach angegeben"
>
> SET koi_type_lv = SET_ATTRIBUTE ("koi", "type", "lv")
>
> COMPILE
>
> ACCESS q: READ/STREAM/RECORDS "{quelle}" ...
>           qsn.qzn/qun, aken + text + eken, anz, tags
> ACCESS z: WRITE/ERASE/STREAM   "{ziel}"  ...
>           zsn.zzn/zun, aken + text + eken
>
> SET eintrag = gram = lv = "nicht offen"
>
> LOOP/999999
>    READ/NEXT/EXIT q
>
>    - vor erstem <ll>: <eintrag> einfügen
>    - vor weiteren <ll>: </eintrag><eintrag> einfügen
>
>    IF (aken.EQ."<ll>")  THEN
>       IF (eintrag.EQ."nicht offen")  THEN
>          WRITE/NEXT/BREAK z "<eintrag>"
>          SET eintrag = "offen"
>       ELSE
>          WRITE/NEXT/BREAK z "</eintrag><eintrag>"
>       ENDIF
>    ENDIF
>
>    - vor erstem <w>: <gram> einfügen
>
>    IF (aken.EQ."<w>" .AND. gram.EQ."nicht offen")  THEN
>       WRITE/NEXT/BREAK z "<gram>"
>       SET gram = "offen"
>    ENDIF
>
>    - nach letztem <w>-<schw>-Paar: </gram> einfügen
>
>    IF (gram.EQ."offen" .AND. tags.NM.":*<<w>>*:*<<sch>>*:")  THEN
>       WRITE/NEXT/BREAK z "</gram>"
>       SET gram = "nicht offen"
>    ENDIF
>
>    - vor <koi type="lv"> bzw. vor <bel>: <lv> einfügen
>
>    IF (aken.EQ.koi_type_lv,"<bel>" .AND. lv.EQ."nicht offen")  THEN
>       WRITE/NEXT/BREAK z "<lv>"
>       SET lv = "offen"
>    ENDIF
>
>    - nach letztem </bel>: </lv> einfügen
>
>    IF (lv.EQ."offen" .AND. tags.NM.":*<<koi>>*:*<<bel>>*:")  THEN
>       WRITE/NEXT/BREAK z "</lv>"
>       SET lv = "nicht offen"
>    ENDIF
>
>    - zum Schluss ggf. </eintrag> einfügen
>
>    IF (eken.EQ."</section>" .AND. eintrag.EQ."offen")  THEN
>       WRITE/NEXT/BREAK z "</eintrag>"
>       SET eintrag = "nicht offen"
>    ENDIF
>
>    IF (SOR)  WRITE/BREAK z
>    WRITE z
> ENDLOOP
>
> ENDACCESS/PRINT q
> ENDACCESS/PRINT z
>
> ENDCOMPILE
>
> ------------------------------------------------------------



Mehr Informationen über die Mailingliste Tustep-Liste