[Tustep-Liste] Aufteilen einer Tustepdatei in viele XML-Einzeldateien
Christian Sonder
christian.sonder at trilog-verlag.de
Mo Sep 29 16:22:11 CEST 2025
Liebe Elke,
anbei eine verbesserte Version des Programms.
Hier die Änderungen und ihre Erklärung:
LOOP/1000000 statt LOOP
Damit werden mindestens 1 Millionen Zeilen verarbeitet.
Wenn Du mehr brauchst, trage hier einfach eine höhere Zahl ein.
TUSTEP stoppt eine Schleife standardmäßig nach 1000 Durchläufen,
das hatte ich vergessen.
FILE/UTF8 statt FILE
Damit wird in die Datei explizit mit dem Code UTF8 geschrieben.
Es gibt ein paar Zeichen, die in TUSTEP als Steuerzeichen gelten,
z. B.: # $ % & @. Wenn Du im TUSTEP-Editor diese Zeichen eintippst,
dann werden sie bei der Ausgabe mit dem "^" escaped (vgl. die
Übersicht auf S. 771 im Handbuch).
Du kannst also entweder diese Steuerzeichen im TUSTEP-Editor mit
^ selbst escapen, also ^# ^$ ^% ^& ^@ oder du machst das beim
Umwandeln. In meinem Programm beispielweise umgesetzt
mit einer X_TABLE.
[Anmerkung: Der TUSTEP-Editor ist kein XML-Editor, deswegen
nimmt TUSTEP an, dass du z. B. "&" ein Steuerzeichen aus dem
Satzprogramm eingetippt hast.]
Führende Nullen kann man sicherlich auch mit einer Funktion
einfügen, aber ich habe auf die schnelle nicht die passende
gefunden und daher eine einfache IF-ELSE-Struktur eingebaut,
die abhängig vom Wert von n Nullen in den Dateinamen einsetzt.
Ich habe sie aber sicher gerade nur übersehen.
Und hier noch die Antwort auf die Frage zum Operator .CT.:
Ja, .CT. steht für "contains". Es gibt eine ganze Reihe von Operatoren,
die Du im Register des Handbuchs (S. 1434) finden kannst:
Von .AB. bis .XOR. Sie stehen im Text des Handbuchs nicht alle
untereinander,
weil sie in verschiedenen Zusammenhängen eingesetzt werden,
aber im Register des Handbuchs sind sie alle untereinander aufgelistet.
Viele Grüsse
Christian
#MAKRO
$$ MODE TUSCRIPT, {}
quelle = "teilen.data"
präfix = "abc"
n = 0
BUILD S_TABLE start = "|<\?xml-model|"
- Austauschtabelle für Steuerzeichen
BUILD X_TABLE austausch = *
DATA |\#|^#|
DATA |\$|^$|
DATA |\%|^%|
DATA |\&|^&|
DATA |\@|^@|
DATA |\_|^_|
DATA |\\|^\|
ACCESS daten: READ/RECORDS $quelle, s.z/u, zeile
- Mindestens 1 Millionen Datensätze verarbeiten
LOOP/1000000
READ/NEXT/EXIT daten
IF (zeile .CT. start) THEN
SET n = n + 1
- Ggfs. Führende Nullen einfügen
IF (n .LT. 10) THEN
SET ziel = "{präfix}_00{n}.xml"
ELSEIF (n .LT. 100) THEN
SET ziel = "{präfix}_0{n}.xml"
ELSE
SET ziel = "{präfix}_{n}.xml"
ENDIF
SET status = CREATE($ziel, FDF-O)
SET status = ERASE($ziel)
PRINT "Beginne in Datei {ziel} zu schreiben."
ENDIF
- Ggfs. austauschen von Steuerzeichen
zeile = EXCHANGE(zeile, austausch)
FILE/UTF8 ziel = zeile
ENDLOOP
ENDACCESS daten
*eof
Am 2025-09-27 19:26, schrieb Dr. Elke Zinsmeister:
> Lieber Christian,
>
> vielen Dank! Wenn ich hier weiter Fragen stelle und daraufhin so
> ausführlich dokumentierte Routinen erhalte, lerne ich TUSCRIPT
> womöglich noch ganz ohne Jour fixe.
>
> Wenn ich die Routine über meine Datei laufen lasse, erhalte ich nach
> dem Schreiben der 9. Datei die Fehlermeldung "Vermutlich Endlosschleife
> (0.0/16)" und die Routine bricht ab.
> Die bereits erstellten Dateien 1 bis 9 kann ich in oxygen zwar öffnen,
> Umlaute etc. werden aber nicht korrekt angezeigt. Gibt es die
> Möglichkeit, als code utf8 anzugeben - so wie ich das in der von Herrn
> Stahl geschickten Lösung eingefügt habe? Das sollte dieses Problem
> wahrscheinlich beheben.
> Kein Problem habe ich dagegen mit "#", das mir mit Herr Stahls Routine
> in oxygen immer mit einem "^" davor angezeigt wird. Warum das passiert,
> habe ich noch nicht verstanden.
> "n" sollte dreistellig, also mit führenden Nullen sein. Das ist in der
> Routine von Herrn Stahl durch den Parameter LNZ gelöst. Geht das hier
> auch irgendwie? Da die im Projekt verwendeten Dateinamen nicht mit den
> Vorgaben für Dateinamen in TUSTEP kompatibel sind, muss ich sie aber
> ohnehin später noch anpassen. Das könnte ich also auch dort machen.
>
> Und noch eine Frage zu TUSCRIPT: .CT. steht vermutlich für "contains" -
> gibt es irgendwo eine Liste der in TUSCRIPT gebräuchlichen Operatoren?
> Im Handbuch und auch im TUSTEP-Wiki habe ich keine gefunden.
>
> Herzliche Grüße
> Elke
Mehr Informationen über die Mailingliste Tustep-Liste