{{indexmenu_n>6}} **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 [[tustep:loesungen:kopieren:detailprobleme|hier]]. ---- [[tustep:loesungen:start|Zurück zum Inhaltsverzeichnis - Lösungen und Tipps]] ---- ====== Kopieren einer Datei ohne Veränderung der Daten ====== - {{files_open:benutzericons:schneider-lastin-lg.jpg?nolink&16x16|schneider-lastin}}]] 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,+,+ ====== Kopieren einzelner Texteinheiten nach Satznummern ====== - {{files_open:benutzericons:schneider-lastin-lg.jpg?nolink&16x16|schneider-lastin}}]] schneider-lastin\\ \\ Das Kommando und seine Spezifikationen lauten:\\ #KOPIERE, QUELLE, ZIEL, MODUS, LOESCHEN, PARAMETER\\ \\ **Musterdatei:**\\ {{files_open:daten:psalm.tf|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.\\ \\ ====== Kopieren einzelner Texteinheiten nach Bedingungen ====== - {{files_open:benutzericons:schneider-lastin-lg.jpg?nolink&16x16|schneider-lastin}} schneider-lastin\\ \\ Das Kommando und seine Spezifikationen lauten:\\ #KOPIERE, QUELLE, ZIEL, MODUS, LOESCHEN, PARAMETER\\ \\ **Musterdatei:**\\ {{files_open:daten:psalm.tf|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 || zf+ |silber| *eof ====== Kopieren mit Zusammenfassen best. Sätze ====== - {{files_open:benutzericons:schneider-lastin-lg.jpg?nolink&16x16|schneider-lastin}} 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**\\ 1 Text Text 1 Text Text 2 2 Text Text Text Text 3 Text Text 3 Text Text 4 Text Text 4 5 Text Text Text Text 5 Text Text **Skript**\\ #da,ziel,fr=- #ko,datei.tf,ziel,-std-,+,* aa || za || *eof **Erklärung:** Verwendung findet hier der Parameter **aa** = **A**bschnitts**A**nfang, mit dem mehrere Sätze zusammengefasst werden können.\\ \\ ====== Kopieren mit Manipulation der Satznummern 1 ====== - {{files_open:benutzericons:schneider-lastin-lg.jpg?nolink&16x16|schneider-lastin}} 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 ... getaggt, sie sind **lückenlos aufsteigend**.\\ Ausgangsdatei Zieldatei 1.1 1 1.1 1 1.2

Text Text ...

1.2

Text Text ...

1.3 2 2.1 2 1.4

Text Text ...

2.2

Text Text ...

1.5 3 3.1 3 1.6

Text Text ...

3.2

Text Text ...

1.7

Text Text ...

3.3

Text Text ...

**Script:**\\ #ko,quelldatei,zieldatei,+,+,* sa || *eof ====== Kopieren mit Manipulation der Satznummern 2 ====== - {{files_open:benutzericons:schneider-lastin-lg.jpg?nolink&16x16|schneider-lastin}} 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 ... 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 1 1.0 1 1.2

Text Text ...

1.1

Text Text ...

1.3 2 2.0 2 1.4

Text Text ...

2.1

Text Text ...

1.5 5 5.0 5 1.6

Text Text ...

5.1

Text Text ...

1.7

Text Text ...

5.2

Text Text ...

1.8 13 13.0 13 1.9

Text Text ...

13.1

Text Text ...

**Script:**\\ #ko,quelldatei,zieldatei,+,+,* nr 1 1000 zf+ || al || el || 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 [[tuscript:loesungen:kopieren_und_manipulieren#Kopieren mit Manipulation der Satznummern|hier]]**\\ \\ \\ ====== Kopieren mit Vergleichstext / Merk-Vergleichstext ====== - {{files_open:benutzericons:schneider-lastin-lg.jpg?nolink&16x16|schneider-lastin}} schneider-lastin (nach einem Skript von N. Bohnert)\\ \\ {{files_open:daten:vglliste.tf|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**\\ 1963 ... 1963 ... 1963 ... ... 1974 ... 1974 ... 1983 ... 1983 ... 1983 ... ... 1983 ... ... 1991 ... 1991 ... 1996 ... 1996 ... **Skript**\\ #da,ergliste,fr=- #ko,vglliste.tf,ergliste,,+,* av 1 || ev 1 || vgl 1 0 xx 1 |*| | ak1 2 || ek1 2 || 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 [[tuscript:loesungen:kopieren:Ersetzen nach Bedingungen|hier]]**\\ \\ ====== Kopieren mit Abfrage ====== - {{files_open:benutzericons:schneider-lastin-lg.jpg?nolink&16x16|schneider-lastin}} 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 ("".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 [[tuscript:loesungen:kopieren#Kopieren mit Abfrage|hier.]]**\\ ---- [[tustep:loesungen:start|Zurück zum Inhaltsverzeichnis - Lösungen und Tipps]]