[Tustep-Liste] Geschachtelte Tags auflösen

Thomas Kollatz kol at steinheim-institut.org
Di Dez 14 14:59:16 CET 2010


Liebe Liste, 

> für Ihre schnellen Lösungen für das Herstellen der Paarigkeit der Tags danke ich Ihnen vielmals. Jetzt können die Tags über die Nummer leicht weiterverarbeitet werden.

ich war gestern unterwegs und bin darum mit meiner Lösung heute natürlich viel zu langsam.
Da es mir Spass gemacht hat, habe ich mir das "Problem" etwas erschwert (mehr Tags, die noch dazu unterschiedlich behandelt werden sollen: Nix ändern / Name ändern / Attribut einfügen).

Nicht ganz uninteressant scheint mir die Möglichkeit zu sein, mit TUSCRIPT direkt eine Datei mit Migrationshintergrund (FDF früher sdf) einzulesen und auch wieder in eine solche auszugeben (also ohne den Umweg über umwandle ...).

Herzliche Grüße
Thomas Kollatz

---->

$$- Aufgabe:
$$- 1. tagname "add" und "bcd" hierarchieabhängig ändern in
$$-    <add1>,<add2>,<bcd1>,<bcd2> - alle andern unverändert ausgeben
$$- 2. tagname "bdd" mit Hierarchiezähler im Attribut versehen:
$$-    <bdd nr="1"> <bdd nr="2">
$$! quelle=test.xml,ziel=ziel.xml
$$ MODE TUSCRIPT

ERROR/STOP CREATE (quelle,seq-o,-std-)
ERROR/STOP CREATE (ziel,seq-o,-std-)

-*** Testdatei
FILE/ERASE $quelle
DATA <xml>xx<add>aa<add><nix>mir passiert nix</nix>bb<add>cc</add><nix>mir passiert auch nix</nix>bb</add>aa</add>
DATA xx <bdd>aaa<abd>bbb</abd><addxyz>mir soll nix passieren</addxyz>
DATA <add>yyy</add><bcd>ccc<bdd>ddd<bdd>ddd</bdd>ddd</bdd></bcd></bdd></xml>
ENDFILE

COMPILE
ACCESS q: READ/STREAM/RECORDS $quelle s.z/u,atag+text+etag,typ,stack
ACCESS z: WRITE/ERASE/STREAM  $ziel  s.z/u,atag+text+etag

--> Falls $quelle und/oder $ziel keine Tustepdatei ist, dann geht es so:
--> ACCESS q: READ/STREAM/RECORDS/UTF8 $quelle s,atag+text+etag,typ,stack
--> ACCESS z: WRITE/ERASE/STREAM/UTF8  $ziel  s,atag+text+etag

LOOP/9999
 READ/EXIT q
  IF (atag.hn."add","bcd","bdd") THEN
    SET tagintabl=CONCAT (":<",atag,">:")
    BUILD S_TABLE tagtable = $tagintabl
    SET count=COUNT (stack,tagtable)
    RELEASE S_TABLE tagtable
    SET tagname=GET_TAG_NAME (atag)
    IF (atag.hn."bdd") THEN
    SET atag=SET_ATTRIBUTE (tagname,"nr",count)
    ELSE
    SET name=CONCAT (tagname,count)
    SET atag=SET_TAG_NAME (atag,name)
    ENDIF
  ENDIF
  IF (etag.hn."add","bcd","bdd") THEN
   SET tagname=GET_TAG_NAME (etag)
    IF (etag.hn."bdd") CONTINUE
    SET tagsintabl=CONCAT (":<<",tagname,">>:")
    BUILD S_TABLE tagtable = $tagintabl
    SET count=COUNT (stack,tagtable)
    RELEASE S_TABLE tagtable
    SET name=CONCAT (tagname,count)
    SET etag=SET_TAG_NAME (etag,name)
  ENDIF
 WRITE z
ENDLOOP
ENDACCESS q
ENDACCESS z
ENDCOMPILE
EXECUTE #ve,{quelle},{ziel},<>,,,,+



Mehr Informationen über die Mailingliste Tustep-Liste