[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