Beispiele für EDT-Prozeduren |
1. | Beispiel für bedingte und unbedingte Sprünge in einer INPUT-Prozedur |
Die Prozedur durchsucht jede Zeile eines Arbeitsbereichs nach einem, zwei oder drei Suchbegriffen. Die Zeilen, die alle Suchbegriffe enthalten, werden am Bildschirm angezeigt und in die Datei find.dat geschrieben. | |
Inhalt der INPUT-Prozedur proc1: | |
@params &search1,&search2,&search3 ;; Parameter definieren Wechseln in Arbeitsbereich 1 in aktueller Zeile nach 1-tem Such-@@rem begriff suchen@@if .f. goto notfind ;; Goto notfind, wenn nicht gefunden Goto end, wenn 2. Suchbegriff fehlt in aktueller Zeile nach 2. Suchbe- @@rem griff suchen Goto notfind, wenn nicht gefunden Goto end, wenn 3. Suchbegriff fehlt in aktueller Zeile nach 3-tem Such-@@rem ;; begriff suchen Goto notfind, wenn nicht gefunden Springen zu end Definieren Sprungmarke notfind Aktuelle Zeile löschen Definieren Sprungmarke end Wechseln in Arbeitsbereich 0 Prozedur 1 aufrufen, erste Zeile %, @rem ;; letzte Zeile $, Schrittweite 1, @rem ;; Schleifensymbol ! alle Zeilen anzeigen Arbeitsbereich in Datei find.dat @rem ;; schreiben
|
Aufruf der INPUT-Prozedur proc1 :
| |
edt testdat -iproc1 Meier Hans 10.12.65
Von der Datei testdat werden alle Sätze angezeigt und in die Datei find.dat geschrieben, die in einer beliebigen Spalte jeweils den Nachnamen "Meier", den Vornamen "Hans" und das Geburtsdatum "10.12.65" enthalten. Beim Laden des EDT wird als erster Parameter der Name der zu bearbeitenden Datei und als zweiter Parameter mit dem Schalter "-i " der Name der INPUT-Prozedur angegeben. Nach der INPUT-Prozedur folgen die Parameter für die INPUT-Prozedur.
| |
2. | Beispiel für eine äußere Schleife |
Mit äußeren Schleifen können Prozeduren mehrmals vollständig durchlaufen werden. Sollen jedoch nur Teile einer Prozedur mehrmals durchlaufen werden, müssen diese Teile in Form von inneren Schleifen formuliert werden. | |
@proc 1 ;; Wechseln in Arbeitsbereich 1@@column 10 on ! insert !:27-36: ;; in aktuelle Zeile Spalten einfügen@end ;; in Arbeitsbereich 0 wechseln@do 1 !=1,5,1 ;; Do-Prozedur aufrufen f. die Zeilen 1 - 5
|
Aufruf der INPUT-Prozedur proc1 :
| |
edt testdat2 -iproc2
In diesem Beispiel werden in den Zeilen 1 - 100 die Spalten 27-36 nach der Spalte 10 eingefügt. Die Prozedur wird für jede Zeile einmal durchlaufen, beginnend mit der Zeile 1. Bei jedem Durchlauf wird das Schleifensymbol "! " um die Schrittweite 1 erhöht. Die Prozedur wird so oft durchlaufen, bis das Schleifensymbol die Nummer der als letzte zu bearbeitende Zeile erreicht hat, in diesem Fall die Zeile 100. Mit dem Schleifensymbol kann die gerade aktuell zu bearbeitende Zeile angesprochen werden.
| |
3. | Beispiel für eine innere Schleife |
Mit inneren Schleifen können auch Zeilen mit variabler Schrittweite bearbeitet werden. Außerdem muss nicht die gesamte Prozedur durchlaufen werden | |
@proc 5 ;; Wechseln in Arbeitsbereich 5@@params &file,&begin,&end ;; Parameter definieren@@rea'&file' ;; Datei einlesen@@on & find '&begin' ;; Suchen Beginn des zu verarbeitenden @@rem Bereichs@@if .false. goto end ;; bei Fehler Abbruch@@set #l1=? ;; Speichern Zeilennummer in Line-Variable #L1@@on & find '&end' ;; Suchen Ende des zu verarbeitenden Bereichs@@if .false. goto end ;; bei Fehler Abbruch@@set #l2=? ;; Speichern Zeilennummer in Line-Variable #L2@@set #l0=#l1+1l ;; Setzen #L0 auf 2-te Zeile des Bereichs@@:begin ;; Beginn der Schleife@@if L #l0 >= #l2 goto copy ;; Abfrage auf Ende des Bereichs@@set #l3=#l0-1l ;; Setzen #L0 auf vorhergehende Zeile@@if #L0:1-5:<>#l3:1-5: goto add ;; Vergleich des Schlüssels aktuelle Zeile @@rem mit letzter Zeile@@delete #l3 ;; vorhergehende Zeile mit gleichem Schlüssel @@rem löschen@@:add ;; Sprungziel add@@set #l0=#l0+1l ;; Erhöhen #L0 um eine Zeile@@goto begin ;; Sprung zu Schleifenbeginn@@:copy ;; Sprungziel copy@@proc2 ;; Wechseln in Arbeitsbereich 2@@copy #l1.-#l2(0) last ;; Kopieren des verarbeiteten Bereichs in@@rem Arbeitsbereich 2@@end ;; Wechseln in Arbeitsbereich 5@@delete ;; Löschen des Arbeitsbereichs 0@@:end ;; Sprungziel end@end ;; Wechseln in Arbeitsbereich 0, Ende Prozedur@do 5(file1,start,ende) ;; Do-Prozedur aufrufen für die Datei file1@do 5(file2,anfang,schluss) ;; Do-Prozedur aufrufen für die Datei file2@proc2 ;; Wechseln in Arbeitsbereich 2@sort ;; Sortieren der Daten in Arbeitsbereich 2@w'sort.dat'o ;; Schreiben sortierte Daten in Datei sort.dat mit @rem ;; Option Overwrite
|
Aufruf der INPUT-Prozedur proc3 :
| |
edt -iproc3
In diesem Beispiel wird der Beginn und Ende eines zu verarbeitenden Bereichs gesucht und in den Line-Variablen #L1 und #L2 gespeichert. Die Schlüssel (Spalte 1 bis 5) jeder Zeile werden mit dem Schlüssel der vorhergehenden Zeile verglichen. Zeilen mit gleichem Schlüssel werden gelöscht. In der Line-Variablen #L0 steht die Nummer der aktuell zu verarbeitenden Zeile. Sie wird um eine relative Zeilennummer erhöht, d.h. die Line-Variable #L0 wird nicht um eine feste Schrittweite erhöht, sondern ihr wird mit dem Kommando SET #L0=#L0+1L die nächste belegte Zeilennummer zugewiesen (z.B. nach Zeile 20 kommt Zeile 50 oder nach Zeile 20 kommt Zeile 20.0001).
| |
Die Prozedur proc5 wird zweimal aufgerufen, jeweils mit verschiedenen Dateien. Die bearbeiteten Zeilen werden in den Arbeitsbereich 2 kopiert. Die Option LAST bewirkt, dass die Daten an das Ende des Arbeitsbereichs 2 angehängt werden. Nach der Verarbeitung der zwei Dateien wird der Arbeitsbereich 2 sortiert. Die sortierten Daten werden in die Datei sort.dat geschrieben.
| |