[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