[Tustep-Liste] Einfügen von tags mit tuscript
Dr. Gottfried Reeg
reeg at zedat.fu-berlin.de
Do Jun 18 09:55:24 CEST 2009
Liebe Frau Jockers,
1) Zum Austauschen "nach Bedingungen", die sich nicht im auszutauschen
Text befinden, folgendes. Es ist m.E. einfacher zwei unterschiedliche
Tabelle zu definieren, und zwar seg_xx und buch_xx und in Abhängigkeit
der Variable seg dann, entweder die eine oder die andren Tabelle zu
verwenden:
$$!
$$ MODE TUSCRIPT
...
SET buchstaben="d"
SET segment=1
- Bei Zahlen können die Anführungszeichen fehlen
BUILD X_TABLE buch_xx = *
DATA ,<<body>>,<<buchstabe id="{buchstabe}">>,
DATA ,<<section>>,,
DATA ,<<ae>>,<<bed>><<ae>>,
DATA ,<<beleg>>,<<beleg>><<bl>>,
DATA ,<</beleg>>,<</bl>><</beleg>>,
DATA ,<</li>>,<</li>><</bed>>,
DATA ,<</section>>,,
DATA ,<</body>>,<</buchstabe>>,
BUILD X_TABLE seg_xx = *
DATA ,<<body>>,,
DATA ,<<section>>,<<segment no= "{segment}">>,
DATA ,<<ae>>,<<bed>><<ae>>,
DATA ,<<beleg>>,<<beleg>><<bl>>,
DATA ,<</beleg>>,<</bl>><</beleg>>,
DATA ,<</li>>,<</li>><</bed>>,
DATA ,<</section>>,<</segment>>,
DATA ,<</body>>,,
...
ACCESS qdaten: READ/STREAM "zwi2" sq.zq/uq, atag + text + etag, typ, stack
ACCESS zdaten: WRITE/ERASE/STREAM "zwi3" sz.zz/uz, atag+text+etag, num, stack
LOOP
READ/EXIT qdaten
SELECT segment
CASE "-"
- Wenn segment den Wert "-" hat, buch_xx
SET text = EXCHANGE (text,buch_xx)
DEFAULT
- Im andern Fall seg_xx
SET text = EXCHANGE (text,seg_xx)
ENDSELECT
- Hier könnte noch weiteres ausgetauscht werden
- Benötigen Sie unbedingt CLEAR ? Bei READ wird die Variable neu belegt.
WRITE/NEXT zdaten
ENDLOOP
ENDACCESS qdaten
ENDACCESS zdaten
2) Zum Script habe ich noch einige Fragen:
a) Benötigen Sie die Satznummern unbedingt? Wenn nicht, böte sich folgende
Möglichkeit an:
Die Datei als ganzes einlesen und auf eine Sternvariable legen.
Daraus eine normale Variable machen.
Dann autauschen - die Stellen, an denen vor <w> das Tag <gram> ergänzt werden muss:
<ae>tamr</ae>
<w>[k.A.]</w>
<sch>fu#.(ul</sch>
<w>dqq</w>
<sch>dal</sch>
<bel>
...
<ae>tamr</ae>
<w>[k.A.]</w>
<sch>fu#.(ul</sch>
<bel>
sind jetzt daran zu erkennen, dass das Endtag <</ae>> vorausgeht. Diese können dann in der
Austauschtabelle berücksichtigt werden - hier am Beispiel der Tabelle buch_xx - entweder
als Randbedingung oder in der Zeichenfolge selbst. Eventuell ist es auf diese Weise auch möglich
mit einer Austauschtabelle für beide Bedigungen hinzukommen.
$$!
$$MODE TUSCRIPT
...
BUILD X_TABLE buch_xx = *
DATA ,<<body>>,<<buchstabe id="{buchstabe}">>,
DATA ,<<section>>,,
DATA ,<<ae>>,<<bed>><<ae>>,
DATA ,<<beleg>>,<<beleg>><<bl>>,
DATA ,<</beleg>>,<</bl>><</beleg>>,
DATA ,<</li>>,<</li>><</bed>>,
DATA ,<</section>>,,
DATA ,<</body>>,<</buchstabe>>,
DATA ,<</ae>><<w>>,<</ae>> <<gram>><<w>>,
- Tabelle zu Aufteilen der normlen Variable in eine Sternvariable
BUILD S_TABLE split= *
DATA :<<::<</:%<<:
SET zq = "zwi"
SET text = FILE (zwi)
- Die gesamte Datei wird eingelesen und als Sternvariable abgespeichert.
SET text = JOIN (text,"")
- Die Sternvariable wird zu einer normalen Variable, zwischen den Zeilen wird nichts ergänzt,
- da sie anhand der spitzen Klammern unterteilt werden können
- Austauschen, bzw. so wie oben
SET text = EXCHANGE (text,buch_xx)
- Zerlegen der normalen Variabel in eine Sternvariable, so dass bei jedem Tag eine neue Zeile beginnt:
SET text = SPLIT (text,|split)
- Nicht | vergessen, ansonsten fällt die gefundene Zeichenfolge weg.
- Die Sternvariable wird jetzt in die Datei "zwi3" geschrieben
FILE/ERASE "zwi3"= (text)
Ich denke, dass Sie hiermit weiterkommen sollten, wenn nicht melden Sie sich noch einmal.
Einen schönen Tag
Gottfried Reeg
Barbara Jockers schrieb:
> Diskussionsforum Tustep-Liste
> Weitere Informationen: www.itug.de
> ------------------------------------------------------------
>
> Liebe Listenleser,
>
> leider bin ich am Ende meiner (sehr geringen) tuscript-Weisheit
> angekommen. Ausgangspunkt ist eine aus Word importierte Datei, deren
> Tags wenig geschachtelt hintereinander stehen. Jetzt sollen
> hierarchische Tags eingefügt werden. So soll das ganze nachher aussehen:
>
> <?xml version="1.0"?>
> <document>
> <buchstabe id="BUCHSTABE">
> <segment no="SEGMENTIDENTIFIKATOR">
> <eintrag>
> <ll></ll>
> <koi type="lat"></koi> <!-- kann fehlen -->
> <bed>
> <ae></ae>
> <gram>
> <w></w>
> <sch></sch> <!-- w und sch können (als Paar) mehrmals auftreten -->
> </gram>
> <lv>
> <koi type="lv"></koi> <!-- kann fehlen -->
> <beleg>
> <bl></bl>
> </beleg> <!-- beleg kann mehrmals auftreten -->
> </lv>
> <li></li>
> </bed> <!-- bed kann mehrmals auftreten -->
> </eintrag> <!-- eintrag kann mehrmals auftreten -->
> </segment> <!-- segment kann mehrmals auftreten -->
> </buchstabe> <!-- buchstabe kann mehrmals auftreten -->
> </document>
>
> Die zu bearbeitenden Teildateien haben entweder ein Segment- oder ein
> Buchstabentag. Dieses wird zusammen mit <bed> und <bl> eingefügt
> (s.u.). Außerdem fehlen noch die Tags <eintrag>, <gram>, <lv>. Da
> diese in Abhängigkeit von der Tagumgebung eingesetzt werden müssen,
> brauche ich dafür Bedingungen. (weiter nach dem Makro)
>
> $$ MODE TUSCRIPT
> SET quelle = "dprobe_na.xml"
> SET buchstabe = "d"
> SET segment = "1"
> SET status = CREATE ("zwi3", SEQ-T, -std-)
> IF (segment .EQ. "-") THEN
> BUILD X_TABLE xx = *
> DATA ,<<body>>,<<buchstabe id="{buchstabe}">>,
> DATA ,<<section>>,,
> DATA ,<<ae>>,<<bed>><<ae>>,
> DATA ,<<beleg>>,<<beleg>><<bl>>,
> DATA ,<</beleg>>,<</bl>><</beleg>>,
> DATA ,<</li>>,<</li>><</bed>>,
> DATA ,<</section>>,,
> DATA ,<</body>>,<</buchstabe>>,
> ELSE
> BUILD X_TABLE xx = *
> DATA ,<<body>>,,
> DATA ,<<section>>,<<segment no= "{segment}">>,
> DATA ,<<ae>>,<<bed>><<ae>>,
> DATA ,<<beleg>>,<<beleg>><<bl>>,
> DATA ,<</beleg>>,<</bl>><</beleg>>,
> DATA ,<</li>>,<</li>><</bed>>,
> DATA ,<</section>>,<</segment>>,
> DATA ,<</body>>,,
> ENDIF
> IF (quelle .EI. "_na.xml") THEN
> ACCESS qdaten: READ/STREAM "zwi2" sq.zq/uq, atag + text + etag, typ, stack
> MODIFY ACCESS qdaten X_TABLE xx
> ACCESS zdaten: WRITE/ERASE/STREAM "zwi3" sz.zz/uz, atag+text+etag, num, stack
> LOOP
> READ/EXIT qdaten
> WRITE/NEXT/CLEAR zdaten
> ENDLOOP
> ENDACCESS qdaten
> ENDACCESS zdaten
> RELEASE X_TABLE xx
> ENDIF
>
> Wenn ich das Handbuch richtig verstanden habe, kann ich nach "ACCESS
> zdaten" noch ein zweites Modify schalten, bzw. mehrere, wenn man sie
> in Abhängigkeit von Bedingungen setzt. Aber wie muß ich vorgehen, daß
> danach tags eingefügt werden, und zwar an die richtige Stelle?
> Wahrscheinlich braucht man auch loop dafür?
>
> Für Nachhilfe in dieser Angelegenheit wäre ich äußerst dankbar.
>
> Außerdem habe ich noch ein paar kleine Fragen:
> Gibt es in Tuscript etwas, was dem #ko-Parameter BLU entspricht? Denn
> die Option NSP für READ gilt ja wohl nur für Fremddateien?
> Warum wird die Zieldatei im Programm-Modus numeriert?
>
> In der Hoffnung, daß ich Ihre Geduld nicht zu sehr strapaziere,
> mit vielen Grüßen
> Barbara Jockers
>
> ------------------------------------------------------------
> Tustep-Liste at itug.de
> https://lists.uni-wuerzburg.de/mailman/listinfo/tustep-liste
>
>
Mehr Informationen über die Mailingliste Tustep-Liste