Bei diesem Verfahren werden die neu einzufügenden Zeilen zwischen zwei bereits existierende Zeilen eingefügt, ohne bereits existierende Zeilen zu überschreiben. Zuerst wird versucht, die neu einzufügenden Zeilen unter Verwendung der aktuellen Schrittweite einzufügen. Können die neuen Zeilen nicht auf diese Weise eingefügt werden, wird die Schrittweite zum Einfügen solange durch 10 dividiert, bis das Einfügen der neuen Zeilen möglich ist oder die kleinstmögliche Schrittweite von 0.0001
erreicht wurde.
Konnten auch mit der kleinstmöglichen Schrittweite von 0.0001
die neuen Zeilen nicht komplett eingefügt werden, wird der Einfügevorgang mit einer Fehlermeldung abgebrochen, wenn zuvor durch die Anweisung @PAR RENUMBER=OFF die automatische Umnummerierung von Zeilen ausgeschaltet wurde.
Ist dagegen die automatische Umnummerierung von Zeilen eingeschaltet (@PAR RENUM-BER=ON), wird versucht, die größere der beiden Zeilennummern, zwischen die eingefügt werden soll und eventuell weitere nachfolgende Zeilennummern so umzunummerieren, dass der Einfügevorgang erfolgreich abgeschlossen werden kann.
Nur wenn nicht mehr genügend Zeilen umnummeriert werden können, wird der Einfügevorgang auch in diesem Fall mit einer Fehlermeldung abgebrochen. Beim Start des EDT gilt immer die Einstellung @PAR RENUMBER=ON für alle Arbeitsdateien, die aber für jede Arbeitsdatei separat geändert werden kann.
Nachfolgend wird der Einfügevorgang noch etwas genauer beschrieben.
Bei diesem Einfügeverfahren werden immer zwei Zeilennummern benötigt, zwischen die die neuen Zeilen eingefügt werden sollen. Eine der beiden Zeilennummern ist durch die betreffende Anweisung (ggf. implizit) vorgegeben. Bei den Kurzanweisungen des F-Modus ist dies z.B. die Zeilennummer der Zeile, in der die Kurzanweisung angegeben wurde, bei der Anweisung @XCOPY z.B. die Zeilennummer der bisher letzten Zeile der Arbeitsdatei.
In den meisten Fällen wird nach dieser explizit oder implizit gegebenen Zeilennummer eingefügt. Als zweite Zeilennummer wird dann die Zeilennummer der nächsten Zeile genommen. Wird nach der letzten Zeile der Arbeitsdatei eingefügt, so wird als fiktive Zeilennummer für die zweite Zeile 10000.0000
angenommen.
Nur bei den Kurzanweisungen B,I,1..9
und der Anweisung @COPY (Format 1) mit Angabe des Parameters BEFORE
wird vor der vorgegebenen Zeile eingefügt. In diesem Fall wird als zweite Zeilennummer die Zeilennummer der vorangehenden Zeile genommen. Wird vor der ersten Zeile eingefügt, so wird als Zeilennummer für die zweite Zeile 0.0000
angenommen. Ist die Arbeitsdatei leer, so wird als erste Zeilennummer 0.0000
und als zweite Zeilennummer 10000.0000
angenommen.
Die fiktive Zeilennummer 0.0000
dient dabei nur zur Bestimmung der Zeilennummer der ersten einzufügenden Zeile (= 0.0000
+ Schrittweite) und kann selbst nicht belegt werden.
Einfügen ohne automatische Umnummerierung (@PAR RENUMBER=OFF)
Als Schrittweite für den ersten Einfügeversuch wird die aktuelle Schrittweite genommen. Die Zeilennummer der ersten einzufügenden Zeile erhält man, indem man zu der kleineren der beiden Zeilennummern, zwischen die eingefügt werden soll, die Schrittweite addiert. Die Zeilennummern der weiteren einzufügenden Zeilen ergeben sich durch sukzessives Addieren der Schrittweite. Passen die auf diese Weise nummerierten Zeilen zwischen die beiden Ausgangszeilen hinein, wird diese Nummerierung verwendet.
Passen sie dagegen nicht hinein, hängt das weitere Vorgehen davon ab, ob die Schrittweite gleich der kleinstmöglichen Schrittweite von 0.0001
ist oder nicht.
Ist sie gleich 0.0001
, so wird das Einfügen der Zeilen mit der Meldung EDT5365
abgewiesen.
Ist die Schrittweite größer als 0.0001
, so wird daraus eine neue Schrittweite ermittelt, indem die vorhergehende Schrittweite durch 10 geteilt wird (die aktuelle Schrittweite wird dabei nicht verändert!). Ist diese neue Schrittweite kleiner als 0.0001
, so wird 0.0001
als neue Schrittweite genommen.
Mit dieser neuen Schrittweite wird nun ein neuer Einfügeversuch unternommen. Können die einzufügenden Zeilen mit dieser Nummerierung eingefügt werden, ist man fertig.
Ist andernfalls die Schrittweite bereits gleich 0.0001
, so wird der Einfügevorgang mit der Meldung EDT5365
abgewiesen. Ist die Schrittweite noch größer als 0.0001
, so wird erneut durch 10 geteilt und mit dieser neuen Schrittweite ein weiterer Versuch unternommen.
Die aktuelle Zeilennummer ändert sich nur, wenn mindestens eine neue Zeile entsteht, deren Zeilennummer größer ist, als die bisher höchste Zeilennummer und sie ist dann gleich der Zeilennummer der letzten Zeile der Arbeitsdatei plus der aktuellen Schrittweite (dies kann nur beim Einfügen nach der bisher letzten Zeile entstehen).
Einfügen mit automatischer Umnummerierung (@PAR RENUMBER=ON)
In diesem Fall wird ein zweistufiges Verfahren angewendet, um möglichst kompatibel zum EDT V16.6B zu bleiben.
Es wird zunächst genauso vorgegangen, wie im Fall @PAR RENUMBER=OFF.
Ist man bei der Schrittweite 0.01
angekommen und können die Zeilen noch nicht eingefügt werden, wird versucht, alle bereits existierenden Zeilen, die durch die neu eingefügten Zeilen überschrieben worden wären, so umzunummerieren, dass sie an die bisher zuletzt eingefügte Zeile unter Verwendung der Schrittweite 0.01
angefügt werden können. Dies ist das Verfahren des EDT V16.6B bzw. des Kompatibilitäts-Modus. Können dabei nicht genügend Zeilen umnummeriert werden, bricht der EDT V16.6B bzw. der Kompatibilitäts-Modus den Einfügevorgang mit Fehlermeldung ab.
Der Unicode-Modus dagegen versucht nun durch weiteres Verkleinern der Schrittweite
(d.h. Teilen durch 10) bis zur kleinstmöglichen Schrittweite von 0.0001
, die Zeilen einzufügen.
Ist man schließlich bei der kleinstmöglichen Schrittweite von 0.0001
angekommen, so werden die Zeilen auf jeden Fall mit der Schrittweite 0.0001
eingefügt. Alle bereits existierenden Zeilen, die durch die neu eingefügten Zeilen überschrieben worden wären, werden nun so umnummeriert, dass sie an die bisher zuletzt eingefügte Zeile unter Verwendung der Schrittweite 0.0001
angefügt werden.
Falls durch diese Umnummerierung noch mal bereits existierende Zeilen überschrieben werden, wiederholt sich der Vorgang, d.h., auch diese Zeilen werden umnummeriert. Wenn durch die Umnummerierung keine bereits existierenden Zeilen mehr überschrieben werden, ist der Vorgang des Einfügens und Umnummerierens beendet.
Auch in diesem Fall ändert sich die aktuelle Zeilennummer nur, wenn mindestens eine neue Zeile entsteht, deren Zeilennummer größer ist, als die bisher höchste Zeilennummer und sie ist dann gleich der Zeilennummer der letzten Zeile der Arbeitsdatei plus der aktuellen Schrittweite.
Eine Ausnahme bildet die Kurzanweisung O
.
Bei dieser Kurzanweisung werden zunächst, beginnend bei der mit O
markierten Zeile, nur bereits existierende Zeilen überschrieben. Sind alle nach der mit O
markierten Zeile bereits überschrieben und sind noch einzufügende Zeilen vorhanden, so werden diese Zeilen nach der letzten überschriebenen Zeile gemäß dem oben beschriebenen Verfahren eingefügt.
Der folgenden Tabelle kann entnommen werden, bei welcher EDT-Anweisung dieses Verfahren angewendet wird (bei einigen dieser EDT-Anweisungen kommen bei einem anderen Format oder anderen Operanden auch noch andere Einfügeverfahren zur Anwendung). Anweisungen, die nicht mit einem EDT-Anweisungssymbol beginnen, sind Kurzanweisungen.
Anweisung | Bemerkungen zu den Operanden | Allgemeine Bemerkungen |
A | ||
B | ||
I | ||
1..9 | ||
O | Wegen der Abweichung vom Verfahren, | |
T | ||
@COMPARE | Die Arbeitsdatei wird vor der Verwendung | |
@COPY | Einlesen von SAM-Dateien, POSIX- | Wird keiner der Operanden |
@FSTAT | ohne Zielangabe bei Ausgabe im | Die Arbeitsdatei |
@OPEN | Öffnen von SAM-Dateien, POSIX- | Die Arbeitsdatei muss vor Ausführung der |
@SDFTEST | ||
@SEPARATE | ||
@SHOW | ohne Zielangabe bei Ausgabe im | Die Arbeitsdatei |
@STAJV | ohne Zielangabe bei Ausgabe im | Die Arbeitsdatei |
@XCOPY | Wenn die Arbeitsdatei nicht leer ist, | |
@XOPEN | Die Arbeitsdatei muss vor Ausführung der |