[Tustep-Liste] Aufteilen einer Tustepdatei in viele XML-Einzeldateien
Kuno Schälkle
schaelkle at zdv.uni-tuebingen.de
Mo Sep 29 18:10:48 CEST 2025
Liebe Frau Zinsmeister, lieber Herr Sonder,
> 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.
Die geeignete Funktion ist CENTER.
> 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
kann also durch
> n = CENTER (n, +3, "0")
> SET ziel = "{präfix}_{n}.xml"
ersetzt werden.
Mit besten Grüßen
Kuno Schälkle
> Am 29.09.2025 um 16:22 schrieb Christian Sonder <christian.sonder at trilog-verlag.de>:
>
> 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
> --
> Tustep-Liste mailing list
> Tustep-Liste at itug.de
> https://lists.itug.de/mailman/listinfo/tustep-liste
Mehr Informationen über die Mailingliste Tustep-Liste