Vorbemerkung: Mit dem TUSTEP-Kommando #KOPIERE
können Dateien unverändert kopiert oder aber beim Kopieren die Daten (mittels Parametern) auf vielfältige Art analysiert, ausgewertet, modifiziert, ergänzt oder extrahiert werden.
►► Lösungen zu Detailfragen und -Problemen im Zusammenhang mit #KOPIERE
finden Sie hier.
Zurück zum Inhaltsverzeichnis - Lösungen und Tipps
- ]] schneider-lastin
1. Datei wird unverändert kopiert, die Satznummern bleiben erhalten.
Das Kommando und seine Spezifikationen lauten:
#KOPIERE, QUELLE, ZIEL, MODUS, LOESCHEN
#= 1. Die Quelldatei 'quelle.tf' wird ggf. mit dem Kommando #anmelde angemeldet #an,quelle.tf #= 2. Die Zieldatei 'ziel.tf' wird als (permanente) Datei mit dem Kommando #datei erstellt #da,ziel.tf,seq-ap #= 3. Datei 'quelle.tf' wird unverändert kopiert (MODUS=-) #ko,quelle.tf,ziel.tf,-
2. Datei wird beim Kopieren neu durchnummeriert
#= Datei 'quelle.tf' wird neu durchnummeriert (MODUS=+) #= evtl. vorhandene Daten in der Zieldatei werden gelöscht (LOESCHEN=+) #ko,quelle.tf,ziel.tf,+,+
- ]] schneider-lastin
Das Kommando und seine Spezifikationen lauten:
#KOPIERE, QUELLE, ZIEL, MODUS, LOESCHEN, PARAMETER
Musterdatei:
psalm.tf [350 KB]
Aus der Datei 'psalm.tf' (= der gesamte Psalter) werden bestimmte Abschnitte (= Psalmen) herauskopiert, im vorliegenden Fall die kompletten Psalmen 12, 15 und 87.
#ko,psalm.tf,psalmziel.tf,-,+,* nr+ 2.0-2.999'15.0-15.999'87.0-87.999 *eof
► Mit dem Parameter nr+ werden die Seiten-Zeilen-Nummern (auch Bereiche) der Sätze angegeben, die kopiert werden sollen; die einzelnen Angaben müssen durch Apostroph getrennt werden. Die Sätze werden in der Reihenfolge eingelesen, in der die Seiten-Zeilen-Nummern angegeben sind. Mehrfachnennungen und Überlappungen sind möglich.
- schneider-lastin
Das Kommando und seine Spezifikationen lauten:
#KOPIERE, QUELLE, ZIEL, MODUS, LOESCHEN, PARAMETER
Musterdatei:
psalm.tf [350 KB]
1. Aus der Datei 'psalm.tf' (= der gesamte Psalter) werden diejenigen Sätze (= Verse) kopiert,
die eine bestimmte Zeichenfolge enthalten.
a. die Zeichenfolge „silber“
#ko,psalm.tf,psalmziel.tf,-,+,* zf+ |silber| *eof
b. die Zeichenfolgen „silber“ ODER „gold“, aber nicht „golden“
zf+ |silber|gold||golden|
c. die Wörter „Silber“ ODER „Gold“ (aber keine Zusammensetzungen, z.B. „Goldschmuck“)
zf+ |\Silber|\Gold||\Silber{\a}|\Gold{\a}|| alternativ: zf+ |\Silber||\Silber{\a}|| zf+ |\Gold||\Gold{\a}||
2. Aus der Datei 'psalm.tf' werden diejenigen Abschnitte (= Psalmen) kopiert,
die die Zeichenfolge „silber“ enthalten
#ko,psalm.tf,psalmziel.tf,-,+,* aa |<psalm>| zf+ |silber| *eof
- schneider-lastin
Aufgabe: In einer Datei sollen bestimmte (TUSTEP-)Sätze zu einem Satz zusammengefasst werden, ohne dass sich die übrige Satzeinteilung der Datei ändert.
Ausgangssituation: linke Spalte – Ergebnis: rechte Spalte
<ken>1</ken> Text Text <ken>1</ken> Text Text <ken>2</ken> <ken>2</ken> Text Text Text Text <ken>3</ken> Text Text <ken>3</ken> Text Text <ken>4</ken> Text Text <ken>4</ken> <ken>5</ken> Text Text Text Text <ken>5</ken> Text Text
Skript
#da,ziel,fr=- #ko,datei.tf,ziel,-std-,+,* aa |<ken>| za |<ken>| *eof
Erklärung: Verwendung findet hier der Parameter aa = AbschnittsAnfang, mit dem mehrere Sätze zusammengefasst werden können.
- schneider-lastin
Aufgabe: Eine Datei, die mehrere Dokumente (etwa Briefe, Urkunden etc.) enthält, soll so umkopiert werden, dass die Seitennummer bei jeder neuen Dokumentnummer um 1 erhöht wird. Die Dokumentnummern stehen im Text (und zwar am Zeilenbeginn) und sind mit <nr>…</nr> getaggt, sie sind lückenlos aufsteigend.
Ausgangsdatei Zieldatei 1.1 <nr>1</nr> 1.1 <nr>1</nr> 1.2 <p>Text Text ...</p> 1.2 <p>Text Text ...</p> 1.3 <nr>2</nr> 2.1 <nr>2</nr> 1.4 <p>Text Text ...</p> 2.2 <p>Text Text ...</p> 1.5 <nr>3</nr> 3.1 <nr>3</nr> 1.6 <p>Text Text ...</p> 3.2 <p>Text Text ...</p> 1.7 <p>Text Text ...</p> 3.3 <p>Text Text ...</p>
Script:
#ko,quelldatei,zieldatei,+,+,* sa |<nr>| *eof
- schneider-lastin
Aufgabe: Eine Datei, die mehrere Dokumente (etwa Briefe, Urkunden etc.) enthält, soll so umkopiert werden, dass die Satznummer sich nach der Nummer des Dokuments richtet. Die Dokumentnummern stehen im Text und sind mit <nr>…</nr> getaggt, sie sind aufsteigend, aber nicht fortlaufend. Die Zeilennumer soll mit 0 beginnen.
Vorteile: 1. Ein Dokument kann im Editor gezielt aufgerufen/angezeigt werden; 2. die Satznummern können für die Erstellung von Arbeitsregistern als Referenzen ausgewertet werden.
Ausgangsdatei Zieldatei 1.1 <nr>1</nr> 1.0 <nr>1</nr> 1.2 <p>Text Text ...</p> 1.1 <p>Text Text ...</p> 1.3 <nr>2</nr> 2.0 <nr>2</nr> 1.4 <p>Text Text ...</p> 2.1 <p>Text Text ...</p> 1.5 <nr>5</nr> 5.0 <nr>5</nr> 1.6 <p>Text Text ...</p> 5.1 <p>Text Text ...</p> 1.7 <p>Text Text ...</p> 5.2 <p>Text Text ...</p> 1.8 <nr>13</nr> 13.0 <nr>13</nr> 1.9 <p>Text Text ...</p> 13.1 <p>Text Text ...</p>
Script:
#ko,quelldatei,zieldatei,+,+,* nr 1 1000 zf+ |<nr>| al |<nr>| el |</nr>| liv i0 rr s11 = i0; s12 = 0; s13 = 1; spn 3 *eof
► Erklärung: Die Dokumentnummer wird mit den Parametern al, el, liv gelesen und mit liv in die Variable i0 abgespeichert. Der Wert der Variable i0 wird mit dem Parameter rr auf die Variable s11, welche die Seitennummer enthält, gespeichert, die Variable s12, welche die Zeilennummer enthält, wird auf 0 gesetzt. Der Parameter nr ist notwendig, wenn ein Dokument (Brief, Urkunde etc.) mehr als 60 (TUSTEP-)Sätze (Voreinstellung) umfasst; im vorliegenden Beispiel wird die Anzahl der möglichen Zeilen pro (TUSTEP-)Seite auf 1000 hochgesetzt.
Eine Lösung der vorstehenden Aufgabe mit TUSCRIPT finden sie hier
- schneider-lastin (nach einem Skript von N. Bohnert)
vglliste.tf [2 KB]
Aufgabe: Eine Liste mit Jahreszahlen soll so umkopiert werden, dass nachfolgende gleiche Jahreszahlen unterdrückt werden.
Ausgangssituation: linke Spalte – Ergebnis: rechte Spalte
<j>1963</j> <t>...</t> <j>1963</j> <t>...</t> <j>1963</j> <t>...</t> <t>...</t> <j>1974</j> <t>...</t> <j>1974</j> <t>...</t> <j>1983</j> <t>...</t> <j>1983</j> <t>...</t> <j>1983</j> <t>...</t> <t>...</t> <j>1983</j> <t>...</t> <t>...</t> <j>1991</j> <t>...</t> <j>1991</j> <t>...</t> <j>1996</j> <t>...</t> <j>1996</j> <t>...</t>
Skript
#da,ergliste,fr=- #ko,vglliste.tf,ergliste,,+,* av 1 |<j>| ev 1 |</j>| vgl 1 0 xx 1 |<j>*</j>| | ak1 2 |<j>| ek1 2 |</j>| spn 23 sp2 3 5 *eof
Erklärung: Ein mit den Parametern AV und EV definierter Vergleichstext (die Jahreszahl) wird mit einem zuvor gemerkten Vergleichstext verglichen. Parameter VGL prüft, ob die beiden Texte übereinstimmen. Im Falle von Ja wird die Jahreszahl mit dem Parameter XX entfernt und die Texteinheit in die Zieldatei ausgegeben (3); im Falle von Nein wird die Texteinheit unverändert in die Zieldatei ausgegeben (23). Anschließend wird derselbe Vergleichstext (die Jahreszahl) mit den Parametern AK1 und EK1 nochmals eingelesen und im Programmteil 5 zum neuen Merk-Vergleichstext bestimmt, der danach mit dem nächsten eingelesenen Vergleichstext verglichen wird (siehe „Logischer Programmaufbau“ von #KOPIERE
im Handbuch).
Die Parameter AV und AK1 können weggelassen werden; sie wurden hier nur zur Verdeutlichung aufgenommen.
Eine Lösung dieser Aufgabe mit TUSCRIPT finden sie hier
- schneider-lastin
Aufgabe: Innerhalb eines „#KOPIERE“ mit einer Austauschanweisung soll der Benutzer durch Ja-Nein-Abfrage entscheiden können, ob im Ausgabesatz ein Asteriscus eingefügt werden soll oder nicht, ob also
xx |eingabe|ausgabe*| oder xx |eingabe|ausgabe|
ausgeführt werden soll.
Einfache Lösung (Skript: N. Bohnert):
#makro $$? "Soll ein Asterisk angefügt werden? (Ja/Nein)", antw="ja" #ko,quelle,ziel,,+,* $$ IF ("<antw>".AB."Ja") THEN xx |eingabe|ausgabe*| $$ ELSE xx |eingabe|ausgabe| $$ END IF *eof* *eof
Lösung mit Frage im Pop-up-Fenster mit Schaltflächen (Skript: M. Trauth):
#makro $$ MODE TUSCRIPT, {} SET system = SYSTEM() IF (system .EQ. "WIN") THEN SET frage = * DATA ====================================== DATA ==== Asteriskus ausgeben? ==== DATA ====================================== SET antwort = QUESTION ("Frage:", frage, YES) ELSE ASK "Asteriskus ausgeben? (j/n*) ", antwort = "n" END IF MODE DATA #ko,quelle,ziel,,+,* $$ IF (antwort .AB. "ja", "yes") THEN xx |eingabe|ausgabe*| $$ ELSE xx |eingabe|ausgabe| $$ END IF *eof* *eof
► Die Frage nach dem Betriebssystem (system
) ist nötig, weil die Makrofunktion QUESTION unter Linux nicht funktioniert.
Eine Lösung der vorstehenden Aufgabe (nur) mit TUSCRIPT finden sie hier.