[Tustep-Liste] Aufteilen einer Tustepdatei in viele XML-Einzeldateien

Dr. Elke Zinsmeister zinsmeister at bbaw.de
Mo Sep 29 21:20:24 CEST 2025


Lieber Herr Schälkle, lieber Christian, lieber Herr Stahl,

jetzt laufen beide Routinen rund. Vielen Dank für die Unterstützung! Da 
die old school Variante deutlich schneller ist als diejenige mit 
TUSCRIPT, werde ich wohl sie verwenden. Gleichzeitig habe ich aber viel 
über TUSCRIPT gerlernt und werde dieses neue Wissen sicherlich bei 
anderen Problemen gewinnbringend einsetzen können.

Herzliche Grüße
Elke Zinsmeister


Am 2025-09-29 18:10, schrieb Kuno Schälkle:
> 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

-- 
Dr. Elke Zinsmeister

Berlin-Brandenburgische Akademie der Wissenschaften

Der Österreichische Bibelübersetzer - Gottes Wort deutsch
Jägerstraße 22/23
D-10117 Berlin
Tel.: +49 030 20370 513
https://www.bbaw.de/forschung/der-oesterreichische-bibeluebersetzer-gottes-wort-deutsch

Corpus Vitrearum Medii Aevi
Am Neuen Markt 8
D-14467 Potsdam
Tel.: +49 (0)331 2796 114
Fax: +49 (0)331 2796 130
https://cvma.bbaw.de
https://www.corpusvitrearum.de


Mehr Informationen über die Mailingliste Tustep-Liste