<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Itug Forum - TUSCRIPT]]></title>
		<link>https://forum.itug.de/</link>
		<description><![CDATA[Itug Forum - https://forum.itug.de]]></description>
		<pubDate>Sat, 18 Apr 2026 11:19:26 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Daten aus einer TUSTEP-Datei auf mehrere Fremd-Dateien aufteilen]]></title>
			<link>https://forum.itug.de/showthread.php?tid=9</link>
			<pubDate>Sat, 07 Feb 2026 20:45:29 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.itug.de/member.php?action=profile&uid=3">ChristianSonder</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.itug.de/showthread.php?tid=9</guid>
			<description><![CDATA[Gegeben sei eine TEI-Korpus-Datei, die ungefähr folgende Struktur aufweist.<br />
Die Datei ist formatiert und enthält die einzelnen Start- und Endetags für<br />
die Hierarchieebenen jeweils auf einer neuen Zeile:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>&lt;teiCorpus&gt;<br />
    &lt;TEI&gt;<br />
        &lt;!-- Hier das erste TEI-Dokument --&gt;<br />
        ...<br />
    &lt;/TEI&gt;<br />
    &lt;TEI&gt;<br />
        &lt;!-- Hier das zweite TEI-Dokument --&gt;<br />
        ...<br />
    &lt;/TEI&gt;<br />
&lt;/teiCorpus&gt;</code></div></div><br />
Gewünscht ist, dass die einzelnen TEI-Dokumente (alles zwischen &lt;TEI&gt; und &lt;/TEI&gt;) in eigene Dateien geschrieben werden.<br />
<br />
Vorgehen zum Lösen des Problems: <br />
Die Datei wird zeilenweile gelesen.<br />
Bei Beginn eines TEI-Dokuments wird mithilfe eines Zählers eine neue Zieldatei angelegt.<br />
Der Inhalt des TEI-Dokuments wird in einer Sternvariable zwischengespeichert.<br />
Beim Ende eines TEI-Dokuments wird in die Zieldatei geschrieben.<br />
<br />
Hier ein Musterprogramm zur Lösung:<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>#MAKRO<br />
&#36;&#36; MODE TUSCRIPT, {}<br />
SET quelle = "Hier der Name der Quelldatei"<br />
SET präfix = "Hier das Präfix der Zieldateien"<br />
<br />
- Benötigte Variablen<br />
SET n = 0<br />
SET tmp = *<br />
SET ziel = ""<br />
<br />
- Anfang und Ende der TEI-Dokumente<br />
BUILD S_TABLE start = "|&lt;TEI |"<br />
BUILD S_TABLE ende = "|&lt;/TEI&gt;|"<br />
<br />
- Schleife über alle Zeilen der Datei<br />
- Es sollen mindestens eine Millionen Datensätze<br />
- verarbeitet werden, bei Bedarf diesen Wert erhöhen.<br />
ACCESS daten: READ/RECORDS &#36;quelle, s.z/u, zeile<br />
LOOP/1000001<br />
   <br />
 &nbsp;&nbsp;- Es wird bei jedem Schleifendurchlauf ein<br />
   - neuer Datensatz eingelesen, bis zum Ende<br />
   - der Datei (oder bis zur Grenze der Schleife)<br />
   READ/NEXT/EXIT daten<br />
   <br />
 &nbsp;&nbsp;- Wenn ein neues TEI-Dokument beginnt,<br />
   - die Sternvariable tmp für den Inhalt<br />
   - der nächsten Datei leeren, hochzählen<br />
   - und die neue Datei erstellen<br />
   IF (zeile .CT. start) THEN<br />
      SET tmp = *<br />
      SET n = n + 1<br />
      SET n = CENTER(n, +3, "0")<br />
      SET ziel = "{präfix}_{n}.xml"<br />
      SET status = CREATE(&#36;ziel, FDF-O)<br />
   ENDIF<br />
<br />
   - Die neue Zeile der Sternvariable hinzufügen<br />
   SET tmp = APPEND(tmp, zeile)<br />
<br />
   - Wenn das TEI-Dokument endet,<br />
   - den Inhalt in die neue Datei schreiben<br />
   IF (zeile .CT. ende) THEN<br />
      FILE/ERASE/UTF8 ziel = tmp<br />
   ENDIF<br />
<br />
ENDLOOP<br />
ENDACCESS daten<br />
*eof</code></div></div><br />
Komplexität des Algorithmus (vgl. <a href="https://de.wikipedia.org/wiki/Komplexit%C3%A4tstheorie#Landau-Notation" target="_blank" rel="noopener" class="mycode_url">Landau-Notation)<br />
 </a>Die Laufzeit beträgt O(n), da alle n Datensätze jeweils einmal gelesen werden müssen.<br />
Der Speicherverbrauch beträgt O(n), da im Worst-Case-Szenario die Quelldatei in den<br />
Zwischenspeicher kopiert wird.<br />
<br />
<br />
Anmerkung: Wenn Speicherplatz ein Problem darstellt, kann auf das Zwischenspeichern<br />
der Dokumentinhalte in einer Sternvariable verzichtet werden und jede Zeile direkt in<br />
die jeweils neue Datei geschrieben werden. Der Speicherverbrauch wäre dann O(1),<br />
weil nur konstant viel Speicher belegt wird. Allerdings kann dies zu einer erheblichen<br />
Laufzeitverlängerung führen, da nun die Zeilen einzeln statt blockweise geschrieben<br />
werden. Die Laufzeitkomplexität beträgt zwar immer noch O(n), allerdings benötigen<br />
die einzelnen Schreibprozesse mehr Zeit.]]></description>
			<content:encoded><![CDATA[Gegeben sei eine TEI-Korpus-Datei, die ungefähr folgende Struktur aufweist.<br />
Die Datei ist formatiert und enthält die einzelnen Start- und Endetags für<br />
die Hierarchieebenen jeweils auf einer neuen Zeile:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>&lt;teiCorpus&gt;<br />
    &lt;TEI&gt;<br />
        &lt;!-- Hier das erste TEI-Dokument --&gt;<br />
        ...<br />
    &lt;/TEI&gt;<br />
    &lt;TEI&gt;<br />
        &lt;!-- Hier das zweite TEI-Dokument --&gt;<br />
        ...<br />
    &lt;/TEI&gt;<br />
&lt;/teiCorpus&gt;</code></div></div><br />
Gewünscht ist, dass die einzelnen TEI-Dokumente (alles zwischen &lt;TEI&gt; und &lt;/TEI&gt;) in eigene Dateien geschrieben werden.<br />
<br />
Vorgehen zum Lösen des Problems: <br />
Die Datei wird zeilenweile gelesen.<br />
Bei Beginn eines TEI-Dokuments wird mithilfe eines Zählers eine neue Zieldatei angelegt.<br />
Der Inhalt des TEI-Dokuments wird in einer Sternvariable zwischengespeichert.<br />
Beim Ende eines TEI-Dokuments wird in die Zieldatei geschrieben.<br />
<br />
Hier ein Musterprogramm zur Lösung:<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>#MAKRO<br />
&#36;&#36; MODE TUSCRIPT, {}<br />
SET quelle = "Hier der Name der Quelldatei"<br />
SET präfix = "Hier das Präfix der Zieldateien"<br />
<br />
- Benötigte Variablen<br />
SET n = 0<br />
SET tmp = *<br />
SET ziel = ""<br />
<br />
- Anfang und Ende der TEI-Dokumente<br />
BUILD S_TABLE start = "|&lt;TEI |"<br />
BUILD S_TABLE ende = "|&lt;/TEI&gt;|"<br />
<br />
- Schleife über alle Zeilen der Datei<br />
- Es sollen mindestens eine Millionen Datensätze<br />
- verarbeitet werden, bei Bedarf diesen Wert erhöhen.<br />
ACCESS daten: READ/RECORDS &#36;quelle, s.z/u, zeile<br />
LOOP/1000001<br />
   <br />
 &nbsp;&nbsp;- Es wird bei jedem Schleifendurchlauf ein<br />
   - neuer Datensatz eingelesen, bis zum Ende<br />
   - der Datei (oder bis zur Grenze der Schleife)<br />
   READ/NEXT/EXIT daten<br />
   <br />
 &nbsp;&nbsp;- Wenn ein neues TEI-Dokument beginnt,<br />
   - die Sternvariable tmp für den Inhalt<br />
   - der nächsten Datei leeren, hochzählen<br />
   - und die neue Datei erstellen<br />
   IF (zeile .CT. start) THEN<br />
      SET tmp = *<br />
      SET n = n + 1<br />
      SET n = CENTER(n, +3, "0")<br />
      SET ziel = "{präfix}_{n}.xml"<br />
      SET status = CREATE(&#36;ziel, FDF-O)<br />
   ENDIF<br />
<br />
   - Die neue Zeile der Sternvariable hinzufügen<br />
   SET tmp = APPEND(tmp, zeile)<br />
<br />
   - Wenn das TEI-Dokument endet,<br />
   - den Inhalt in die neue Datei schreiben<br />
   IF (zeile .CT. ende) THEN<br />
      FILE/ERASE/UTF8 ziel = tmp<br />
   ENDIF<br />
<br />
ENDLOOP<br />
ENDACCESS daten<br />
*eof</code></div></div><br />
Komplexität des Algorithmus (vgl. <a href="https://de.wikipedia.org/wiki/Komplexit%C3%A4tstheorie#Landau-Notation" target="_blank" rel="noopener" class="mycode_url">Landau-Notation)<br />
 </a>Die Laufzeit beträgt O(n), da alle n Datensätze jeweils einmal gelesen werden müssen.<br />
Der Speicherverbrauch beträgt O(n), da im Worst-Case-Szenario die Quelldatei in den<br />
Zwischenspeicher kopiert wird.<br />
<br />
<br />
Anmerkung: Wenn Speicherplatz ein Problem darstellt, kann auf das Zwischenspeichern<br />
der Dokumentinhalte in einer Sternvariable verzichtet werden und jede Zeile direkt in<br />
die jeweils neue Datei geschrieben werden. Der Speicherverbrauch wäre dann O(1),<br />
weil nur konstant viel Speicher belegt wird. Allerdings kann dies zu einer erheblichen<br />
Laufzeitverlängerung führen, da nun die Zeilen einzeln statt blockweise geschrieben<br />
werden. Die Laufzeitkomplexität beträgt zwar immer noch O(n), allerdings benötigen<br />
die einzelnen Schreibprozesse mehr Zeit.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Informationen aus einem späteren Datensatz in einen früheren Datensatz einfügen]]></title>
			<link>https://forum.itug.de/showthread.php?tid=4</link>
			<pubDate>Sun, 01 Feb 2026 20:56:09 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.itug.de/member.php?action=profile&uid=3">ChristianSonder</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.itug.de/showthread.php?tid=4</guid>
			<description><![CDATA[Folgende Problemstellung wurde gemeldet:<br />
<br />
Es liegt eine TUSTEP-Datei in folgender Form vor:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>&lt;eins&gt;{#}&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;<br />
&lt;eins&gt;{#}&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;<br />
&lt;eins&gt;{#}&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;<br />
&lt;eins&gt;{#}&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;</code></div></div><br />
Nun soll in jeder Zeile in den zweiten Tag die Nummer des ersten Tags der folgenden Zeile eingetragen werden, ohne dass sonst etwas an den Datensätzen geändert wird. In der letzten Zeile soll nichts eingetragen werden, z. B.:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>&lt;eins&gt;1&lt;/eins&gt;&lt;zwei&gt;2&lt;/zwei&gt;<br />
&lt;eins&gt;2&lt;/eins&gt;&lt;zwei&gt;3&lt;/zwei&gt;<br />
&lt;eins&gt;3&lt;/eins&gt;&lt;zwei&gt;4&lt;/zwei&gt;<br />
&lt;eins&gt;4&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;</code></div></div><br />
Lösungsweg:<br />
<br />
Die Datei wird zeilenweise von hinten nach vorne gelesen und die zu schreibende Nummer im Zwischenspeichert gemerkt. <br />
Im ersten Satz von hinten wird nichts eingetragen, ab da die jeweils gemerkte Nummer:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>#MAKRO<br />
&#36;&#36; MODE TUSCRIPT, {}<br />
SET quelle = "Hier der Name der Quelldatei"<br />
SET ziel = "Hier der Name der Zieldatei"<br />
SET daten = FILE(quelle)<br />
<br />
- Wir drehen die Reihenfolge der Datensätze um, lesen also von hinten nach vorne<br />
SET daten = REVERSE(daten)<br />
<br />
- Wir suchen eine Zahl, die zwischen &lt;eins&gt; und &lt;/eins&gt; steht<br />
- {[} = linker Rand; {]} = rechter Rand<br />
BUILD S_TABLE s1 = "|&lt;eins&gt;{[}{#}{]}&lt;/eins&gt;|"<br />
<br />
- Schleife über alle Datensätze (Zeilen)<br />
- Bei jedem Durchgang wird die aktuelle Zeile aus der Variable daten<br />
- gelöscht (LOOP/CLEAR), die Nummer eingesetzt und dann die so geänderte Zeile<br />
- wieder hinzugefügt. Dadurch spart man sich den Speicher für eine zweite<br />
- Sternvariable.<br />
SET nummer = ""<br />
LOOP/CLEAR zeile = daten<br />
   BUILD X_TABLE x1 = "|&lt;zwei&gt;&lt;/zwei&gt;|&lt;zwei&gt;{nummer}&lt;/zwei&gt;|"<br />
   SET zeile = EXCHANGE(zeile, x1)<br />
   RELEASE X_TABLE x1<br />
   SET daten = APPEND(daten, zeile)<br />
<br />
   - Die Nummer wird für den nächsten Durchgang extrahiert<br />
   SET von = SEARCH(zeile, s1, 0, 0, 1, bis)<br />
   SET nummer = EXTRACT(zeile, #von, #bis)<br />
ENDLOOP<br />
<br />
- Wir drehen die Reihenfolge wieder und schreiben in die Zieldatei<br />
SET daten = REVERSE(daten)<br />
FILE/ERASE ziel = daten<br />
*eof</code></div></div><br />
Komplexität des Algorithmus (vgl. <a href="https://de.wikipedia.org/wiki/Komplexit%C3%A4tstheorie#Landau-Notation" target="_blank" rel="noopener" class="mycode_url">Landau-Notation)<br />
</a>Die Laufzeit beträgt O(n), da alle n Datensätze jeweils einmal gelesen werden müssen.<br />
Der Speicherverbrauch beträgt O(1), da nur konstant viel Speicher belegt wird.]]></description>
			<content:encoded><![CDATA[Folgende Problemstellung wurde gemeldet:<br />
<br />
Es liegt eine TUSTEP-Datei in folgender Form vor:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>&lt;eins&gt;{#}&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;<br />
&lt;eins&gt;{#}&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;<br />
&lt;eins&gt;{#}&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;<br />
&lt;eins&gt;{#}&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;</code></div></div><br />
Nun soll in jeder Zeile in den zweiten Tag die Nummer des ersten Tags der folgenden Zeile eingetragen werden, ohne dass sonst etwas an den Datensätzen geändert wird. In der letzten Zeile soll nichts eingetragen werden, z. B.:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>&lt;eins&gt;1&lt;/eins&gt;&lt;zwei&gt;2&lt;/zwei&gt;<br />
&lt;eins&gt;2&lt;/eins&gt;&lt;zwei&gt;3&lt;/zwei&gt;<br />
&lt;eins&gt;3&lt;/eins&gt;&lt;zwei&gt;4&lt;/zwei&gt;<br />
&lt;eins&gt;4&lt;/eins&gt;&lt;zwei&gt;&lt;/zwei&gt;</code></div></div><br />
Lösungsweg:<br />
<br />
Die Datei wird zeilenweise von hinten nach vorne gelesen und die zu schreibende Nummer im Zwischenspeichert gemerkt. <br />
Im ersten Satz von hinten wird nichts eingetragen, ab da die jeweils gemerkte Nummer:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>#MAKRO<br />
&#36;&#36; MODE TUSCRIPT, {}<br />
SET quelle = "Hier der Name der Quelldatei"<br />
SET ziel = "Hier der Name der Zieldatei"<br />
SET daten = FILE(quelle)<br />
<br />
- Wir drehen die Reihenfolge der Datensätze um, lesen also von hinten nach vorne<br />
SET daten = REVERSE(daten)<br />
<br />
- Wir suchen eine Zahl, die zwischen &lt;eins&gt; und &lt;/eins&gt; steht<br />
- {[} = linker Rand; {]} = rechter Rand<br />
BUILD S_TABLE s1 = "|&lt;eins&gt;{[}{#}{]}&lt;/eins&gt;|"<br />
<br />
- Schleife über alle Datensätze (Zeilen)<br />
- Bei jedem Durchgang wird die aktuelle Zeile aus der Variable daten<br />
- gelöscht (LOOP/CLEAR), die Nummer eingesetzt und dann die so geänderte Zeile<br />
- wieder hinzugefügt. Dadurch spart man sich den Speicher für eine zweite<br />
- Sternvariable.<br />
SET nummer = ""<br />
LOOP/CLEAR zeile = daten<br />
   BUILD X_TABLE x1 = "|&lt;zwei&gt;&lt;/zwei&gt;|&lt;zwei&gt;{nummer}&lt;/zwei&gt;|"<br />
   SET zeile = EXCHANGE(zeile, x1)<br />
   RELEASE X_TABLE x1<br />
   SET daten = APPEND(daten, zeile)<br />
<br />
   - Die Nummer wird für den nächsten Durchgang extrahiert<br />
   SET von = SEARCH(zeile, s1, 0, 0, 1, bis)<br />
   SET nummer = EXTRACT(zeile, #von, #bis)<br />
ENDLOOP<br />
<br />
- Wir drehen die Reihenfolge wieder und schreiben in die Zieldatei<br />
SET daten = REVERSE(daten)<br />
FILE/ERASE ziel = daten<br />
*eof</code></div></div><br />
Komplexität des Algorithmus (vgl. <a href="https://de.wikipedia.org/wiki/Komplexit%C3%A4tstheorie#Landau-Notation" target="_blank" rel="noopener" class="mycode_url">Landau-Notation)<br />
</a>Die Laufzeit beträgt O(n), da alle n Datensätze jeweils einmal gelesen werden müssen.<br />
Der Speicherverbrauch beträgt O(1), da nur konstant viel Speicher belegt wird.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Alle Datensätze einer TUSTEP-Datei in einem Datensatz zusammenführen]]></title>
			<link>https://forum.itug.de/showthread.php?tid=3</link>
			<pubDate>Wed, 28 Jan 2026 17:18:45 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.itug.de/member.php?action=profile&uid=3">ChristianSonder</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.itug.de/showthread.php?tid=3</guid>
			<description><![CDATA[<span style="font-size: small;" class="mycode_size">Eine Frage aus der TUSTEP Nutzergemeinde: Ich möchte alle Sätze einer Tustep-Datei in einen einzigen Satz schreiben, ohne dabei mit AA den Abschnittsanfang angeben zu müssen. Geht das?</span><br />
<br />
<span style="font-size: small;" class="mycode_size">Mit TUSCRIPT ist das sehr einfach möglich:</span><br />
<br />
<span style="font-size: small;" class="mycode_size">1. Laden des Datei-Inhalts in eine Sternvariable:</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>SET daten = FILE(quelle)</code></div></div><br />
<br />
<span style="font-size: small;" class="mycode_size">2. Reduzieren der Sternvariable auf eine einfache Variable mit der Funktion JOIN:</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>SET daten = JOIN(daten, "")</code></div></div><br />
<span style="font-size: small;" class="mycode_size">Anmerkung: Man kann auch Trennzeichen angeben, z. B. " " oder ";" oder eben nichts "".</span><br />
<br />
<span style="font-size: small;" class="mycode_size">3. Speichern des Variablen-Inhalts in eine Datei</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>FILE/ERASE ziel = daten</code></div></div><br />
<br />
<span style="font-size: small;" class="mycode_size">Hier ein vollständiges Musterprogramm:</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>#MAKRO<br />
&#36;&#36; MODE TUSCRIPT, {}<br />
SET quelle = "Hier der Name der Quelldatei"<br />
SET ziel = "Hier der Name der Zieldatei"<br />
SET daten = FILE(&#36;quelle)<br />
SET daten = JOIN(daten, "")<br />
FILE/ERASE ziel = daten<br />
*eof</code></div></div><br />
<span style="font-size: small;" class="mycode_size">Sehr nützlich in diesem Zusammenhang sind die TUSCRIPT-Funktionen RECORDS und SIZE, um zu kontrollieren, ob ein JOIN wie erwartet funktioniert hat. </span><br />
<span style="font-size: small;" class="mycode_size">Mit diesen kann die Anzahl der Datensätze einer Datei abgefragt werden (Records) oder die Anzahl der Zeilen in einer Sternvariable (SIZE), z. B.:</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>#MAKRO<br />
&#36;&#36; MODE TUSCRIPT, {}<br />
SET quelle = "Hier der Name derQuelldatei"<br />
SET ziel = "Hier der Name der Zieldatei"<br />
SET anzahl = RECORDS(&#36;quelle)<br />
PRINT "Die Datei {quelle} hat {anzahl} Datensätze."<br />
SET daten = FILE(&#36;quelle)<br />
SET daten = JOIN(daten, "")<br />
SET anzahl = SIZE(daten)<br />
PRINT "Die Variable daten hat jetzt nur noch {anzahl} Zeile(n)."<br />
FILE/ERASE ziel = daten<br />
*eof</code></div></div>]]></description>
			<content:encoded><![CDATA[<span style="font-size: small;" class="mycode_size">Eine Frage aus der TUSTEP Nutzergemeinde: Ich möchte alle Sätze einer Tustep-Datei in einen einzigen Satz schreiben, ohne dabei mit AA den Abschnittsanfang angeben zu müssen. Geht das?</span><br />
<br />
<span style="font-size: small;" class="mycode_size">Mit TUSCRIPT ist das sehr einfach möglich:</span><br />
<br />
<span style="font-size: small;" class="mycode_size">1. Laden des Datei-Inhalts in eine Sternvariable:</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>SET daten = FILE(quelle)</code></div></div><br />
<br />
<span style="font-size: small;" class="mycode_size">2. Reduzieren der Sternvariable auf eine einfache Variable mit der Funktion JOIN:</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>SET daten = JOIN(daten, "")</code></div></div><br />
<span style="font-size: small;" class="mycode_size">Anmerkung: Man kann auch Trennzeichen angeben, z. B. " " oder ";" oder eben nichts "".</span><br />
<br />
<span style="font-size: small;" class="mycode_size">3. Speichern des Variablen-Inhalts in eine Datei</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>FILE/ERASE ziel = daten</code></div></div><br />
<br />
<span style="font-size: small;" class="mycode_size">Hier ein vollständiges Musterprogramm:</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>#MAKRO<br />
&#36;&#36; MODE TUSCRIPT, {}<br />
SET quelle = "Hier der Name der Quelldatei"<br />
SET ziel = "Hier der Name der Zieldatei"<br />
SET daten = FILE(&#36;quelle)<br />
SET daten = JOIN(daten, "")<br />
FILE/ERASE ziel = daten<br />
*eof</code></div></div><br />
<span style="font-size: small;" class="mycode_size">Sehr nützlich in diesem Zusammenhang sind die TUSCRIPT-Funktionen RECORDS und SIZE, um zu kontrollieren, ob ein JOIN wie erwartet funktioniert hat. </span><br />
<span style="font-size: small;" class="mycode_size">Mit diesen kann die Anzahl der Datensätze einer Datei abgefragt werden (Records) oder die Anzahl der Zeilen in einer Sternvariable (SIZE), z. B.:</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><br /><div class="body" dir="ltr"><code>#MAKRO<br />
&#36;&#36; MODE TUSCRIPT, {}<br />
SET quelle = "Hier der Name derQuelldatei"<br />
SET ziel = "Hier der Name der Zieldatei"<br />
SET anzahl = RECORDS(&#36;quelle)<br />
PRINT "Die Datei {quelle} hat {anzahl} Datensätze."<br />
SET daten = FILE(&#36;quelle)<br />
SET daten = JOIN(daten, "")<br />
SET anzahl = SIZE(daten)<br />
PRINT "Die Variable daten hat jetzt nur noch {anzahl} Zeile(n)."<br />
FILE/ERASE ziel = daten<br />
*eof</code></div></div>]]></content:encoded>
		</item>
	</channel>
</rss>