Die DORADO Verarbeitungssprache besteht aus einzelnen Befehlen. Ein Verarbeitungsprogramm oder eine Verarbeitungsvorschrift (auch kurz Verarbeitung genannt) setzt sich aus beliebig vielen dieser Befehle zusammen. Vor, zwischen und hinter den Verarbeitungsbefehlen darf beliebiger Text stehen.
Wann und wo ein Verarbeitungsbefehl beginnt, wird durch ein spezielles Zeichen
kenntlich gemacht, das Vorcode-Zeichen. Das Vorcodezeichen wird auf der Tastatur
über die Tastenkombination
ALT + V
erzeugt. Es wird im folgenden stets als
Vc
dargestellt.
Ein Verarbeitungsbefehl endet normalerweise beim nächsten Leerzeichen,
Tabulator oder einer Zeilenschaltung. Ausnahmen von dieser Regel werden im folgenden
ausdrücklich erwähnt.
Alles was an Text zwischen den Verarbeitungsbefehlen steht, bleibt unverändert
und wird z.B. beim Erstellen einer Liste oder beim Schreiben eines Briefs ungeändert
in die Liste bzw. in den Brief übernommen. Dies gilt nicht nur für
den eigentlichen Text, sondern auch für Gestaltungsmittel wie Attribute,
Tabulatoren oder Lineale.
'Einfache' Verarbeitungsprogramme sind daher häufig normale Texte, in die
lediglich einige Befehle der Verarbeitung, z.B. zum Abruf einer Anschrift eingefügt
sind. Aus diesem Grund werden Verarbeitungsprogramme, wie andere Texte auch,
im DORADO Text erfaßt, gespeichert und geändert.
Wichtigstes Element der DORADO Verarbeitungssprache ist der Zugriff auf Datenbankfeldinhalte, auch als Feldabruf bezeichnet. Über den Feldabruf ist es möglich, Inhalte von Datenbankfeldern an beliebiger Stelle in einen Text, sei es z.B. in einen Brief oder eine Statistik, einzufügen.
In der einfachsten Form erfolgt der Feldabruf durch den Verarbeitungsbefehl:
Vc Feldname
wobei Feldname hier stellvertretend für den Namen eines Datenbankfeldes
steht. Feldnamen dürfen nicht abgekürzt werden, sondern müssen
immer in ihrer vollen Länge und auch korrekt geschrieben werden. Groß-
und Kleinschreibung ist jedoch irrelevant.
Um einen solchen Feldabruf überhaupt ausführen zu können, muß
bekannt sein, mit welcher Datenbank und mit welchem Objekt aus dieser Datenbank
gerade gearbeitet wird. Sowohl die aktuelle Datenbank als auch das aktuelle
Objekt ergeben sich jeweils aus der Systemumgebung, in der die Ausführung
der Verarbeitung gestartet wird.
Bei der Ausführung des Verarbeitungsprogramms wird dann der Abrufbefehl
ersetzt durch den Inhalt des angegebenen Datenbankfeldes aus dem aktuellen Datenbankobjekt.
|
Statt des Feldnamens kann man auch über die Feldnummer Bezug auf einen Feldinhalt nehmen. Dies erfolgt in der Form
Vc Feldnummer
oder
Vc # Feldnummer
Enthält beispielsweise in einer Adressdatenbank das erste Feld den Adresstyp, und folgen anschließend sechs Felder, in denen die Postanschrift gespeichert ist, so kann man über
Vc 2 |
|
Vc 4 |
|
Vc 6 |
Vc 7 |
die Adresse ausgeben.
Überall, wo in Verarbeitungsbefehlen ein Feldname zulässig ist, darf
statt des Feldnamens auch das Lattenzaun-Zeichen gefolgt von der Feldnummer
stehen. Beim Feldabruf darf ferner hinter dem Vc
das Lattenzaun-Zeichen
weggelassen werden, an anderen Stellen ist dies nicht zulässig, um Verwechslung
zwischen Feldnummern und normalen Zahlkonstanten auszuschliessen.
Es kann vorkommen, daß einzelne Datenbankfelder mehrfach vorhanden sind. Hierzu gehören typischerweise bei Literaturdatenbanken die Stichwortfelder oder bei Kontakt- oder Angebotshistorien die Datums- und Kontaktartfelder. In diesem Fall reicht die Angabe des Feldnamens nicht aus, um eindeutig das Feld zu kennzeichnen, dessen Inhalt ausgegeben werden soll. Durch zusätzliche Angabe einer Nummer, die in runden Klammern hinter dem Feldnamen anzugeben ist, muß festgelegt werden, das wievielte Feld gemeint ist.
Die Ausgabe von Mehrfachfeldern erfolgt also durch den Befehl
Vc Feldname ( Nummer )
|
Statt
VcFeldname(1)
ist auch die Schreibweise
VcFeldname
zulässig, wenn das erste von mehreren Feldern ausgegeben werden soll.
Überall, wo in nachfolgend beschriebenen Befehlen der Begriff Feldname steht, ist auch der Zugriff auf ein Mehrfachfeld in der hier beschriebenen Form
Feldname (Nummer)
möglich.
Anstatt den Inhalt eines Datenbankfeldes komplett auszugeben, kann man durch Angabe einer Anfangsposition und einer Zeichenzahl einen Ausschnitt kennzeichnen, der ausgegeben wird. Beide Angaben stehen durch Doppelpunkte getrennt direkt hinter dem Feldnamen
Feldname : Anfangsposition : Zeichenzahl
|
Die Angabe zur Zeichenzahl ist eine Maximalangabe. Ist der Feldinhalt kürzer als die spezifizierte Zeichenzahl, so werden entsprechend weniger Zeichen ausgegeben.
Soll der Feldinhalt ab der ersten Stelle ausgegeben werden, so darf die Angabe der Anfangsposition fehlen. Der Befehl
Vc Ort :: 7
liefert in obigen Beispiel die Ausgabe
D-57489
Soll ab einer bestimmten Position der gesamte nachfolgende Feldinhalt ausgegeben werden, so können der zweite Doppelpunkt sowie die Zeichenzahl weggelassen werden. Der Befehl
Vc Ort : 9
führt also zur Ausgabe der Zeichenfolge
Drolshagen
Feldnamen mit Ausschnittsangaben sind überall dort zulässig, wo die Angabe eines Feldnamens erlaubt ist.
Es ist möglich, Feldinhalte formatiert auszugeben. Dabei können zum einen Minimal- und Maximallängen festgelegt werden, zum anderen kann man wählen, ob die Ausgabe links- oder rechtsbündig erfolgen soll.
Die linksbündige Ausgabe eines Feldes mit gleichzeitiger Angabe von Minimal-
oder Maximallänge erfolgt durch folgenden Befehl, zu dem es drei Formen
gibt:
Vc + Feldname % Minimallänge
Vc + Feldname % % Maximallänge
Vc + Feldname % Minimallänge % Maximallänge
Dieser Befehl bewirkt die Ausgabe des Feldinhaltes. Ist der Feldinhalt kürzer
als die angegebene Minimallänge, so wird die Ausgabe durch entsprechend
viele nachfolgende Leerzeichen ergänzt.
Ist der Feldinhalt länger als eine angegebene Maximallänge, so werden
nur so viele Zeichen ausgegeben, wie als Maximallänge angegeben. Der Rest
des Feldinhaltes wird nicht mitausgegeben.
Ferner gibt es noch den Befehl
Vc Feldname ;
Hier wird der Feldinhalt wie bei einem normalen Feldabruf ausgegeben, aber mit Leerzeichen aufgefüllt bis zu der in der Datenbank-Konfiguration vereinbarten Feldlänge. Obiger Befehl ist also in seiner Wirkung identisch mit
Vc + Feldname % Feldlänge
Die rechtsbündige Ausgabe erfolgt durch den Befehl
Vc + Feldname ! Ausgabelänge
Die Feldausgabe erfolgt rechtsbündig. Dabei werden so viele (geschützte)
führende Leerzeichen ausgegeben, daß die angegebene Ausgabelänge
erreicht wird.
Dieser Befehl ermöglicht es, auf einfache Weise Zahlenkolonnen zu erzeugen.
|
Folgende Punkte sind bei der Feldausgabe mit Längenangaben zu beachten:
Noch ein Hinweis: Zahlenkolonnen kann man natürlich
auch erstellen, indem man den einfachen Feldabruf benutzt, vor dem Feldinhalt
einen Tabulator ausgibt und vorweg einmal ein Lineal mit Dezimaltabulatoren
erzeugt.
Steht direkt hinter einem Vc Zeichen
so werden diese ignoriert, also insbesondere nicht in einen eventuell vorhandenen Ausgabebaustein übernommen. Diese Zeichenkombinationen sind nur dazu da, Verarbeitungsprogramme übersichtlicher zu gestalten.
Im allgemeinen wird das Ende eines Befehles vom Verarbeitungsprogramm problemlos
erkannt. In einigen Fällen ist dies jedoch nicht möglich, nämlich
beispielsweise dann, wenn direkt hinter einem Feldnamen ohne Trennzeichen Buchstaben
oder Ziffern ausgegeben werden sollen. Hier muß als Abtrennung ein Layoutbefehl
z.B. Vc Leerzeichen
benutzt werden.
Innerhalb eines Verarbeitungsprogramm sind auch Kommentare möglich. Kommentaranweisungen
besitzen die Form
Vc " text
Sie dienen zur Dokumentation des Verarbeitungsprogramms. Der Komentartext wird
bei der Ausführung der Verarbeitung ignoriert. Der Kommentar muß
in jedem Fall durch eine Zeilenschaltung beendet werden. Dieses Zeilenende gehört
noch zum Kommentar und wird deshalb ebenfalls nicht mit in die Ausgabedatei
übernommen.
Rumpfklammern werden gebildet durch die Vorcodebefehle
Vc (
und
Vc )
Diese Klammer-Befehle werden nur vom Verarbeitungsprogramm ausgewertet, sind also beim Dokumentenabruf im Text sowie der Hintergrundverarbeitung in der Bearbeitung nicht zulässig.
Innerhalb der Verarbeitung klammern sie den Verarbeitungsrumpf ein, der für
jedes Objekt der DS-Datei einmal ausgeführt wird. Ein Verarbeitungsprogramm
hat somit normalerweise folgenden Aufbau:
Kopf z.B. Überschrift
Element
|
zum Beispiel
|
---|---|
Kopf | Überschrift |
Vc ( | |
Rumpf | wird für jedes Objekt 1x ausgeführt |
Vc ) | |
Fuß | Summenbildung |
Bedingte Anweisungen in ihren unterschiedlichen Formen sind dazu da, in Abhängigkeit von einzelnen Feldinhalten oder sonstigen Bedingungen unterschiedliche Ausgaben zu erzeugen.
Die einfachste Bedingungsanweisung ist die Feldabfrage. Sie besitzt die Form
Vc < Feldname www Vc >
Ist das Datenfeld mit dem angegebenen Namen besetzt, d.h. enthält es mindestens
ein Zeichen, so wird www
ausgegeben bzw. ausgeführt. Dabei
steht www
für eine beliebige Mischung aus Text und weiteren
Befehlen.
|
Neben der Abfrage, ob ein Feld besetzt ist oder nicht, kann man auch den Feldinhalt mit einer beliebigen Zeichenfolge vergleichen. Die bedingte Anweisung hat dann die Form
Vc < Vergleich www Vc >
Unter Vergleich sind folgende Angaben möglich:
|
Als Wert darf eine Zeichenfolge angegebenen werden, die in Apostrophe eingeschlossen ist. Es darf hier aber auch ein anderer Feldname stehen, wenn z.B. zwei Feldinhalte miteinander verglichen werden sollen.
Bei der Ausführung wird der Inhalt des links stehenden Datenfeldes mit
dem rechts stehenden Wert verglichen. Ist der Vergleich erfüllt, liefert
er also eine wahre Aussage, so wird www
ausgeführt.
Es sei noch einmal daran erinnert, daß überall dort, wo ein Feldname
zugelassen ist bzw. erwartet wird, auch ein Mehrfachfeldzugriff oder ein Feldname
mit Ausschnittsangabe erlaubt ist.
|
Hinweis:
Bei den in diesem Abschnitt beschriebenen Vergleichen handelt es sich um reine zeichenweise Vergleiche. Dabei werden die einzelnen Zeichen gemäß ihres ASCII-Wertes einsortiert. Dies ist insbesondere dann zu beachten, wenn die Zeichenfolgen Ziffernzeichen enthalten.
So liefern beispielsweise folgende Vergleiche alle ein positives, d.h. wahres
Ergebnis:
|
Numerische Vergleiche, in denen beide Vergleichsoperanden gemäß ihres Zahlwertes miteinander verglichen werden, sind in Abschnitt 1.7 beschrieben.
Mehrere Vergleiche und Feldabfragen können miteinander verknüpft werden. Die Bedingungsanweisung erhält dann die Form
Vc < Bedingung & Bedingung www Vc >
oder
Vc < Bedingung , Bedingung www Vc >
Das &-Zeichen steht dabei für ein logisches UND, d.h. www
wird nur genau dann ausgeführt, wenn beide Bedingungen, rechts und links
vom &-Zeichen, erfüllt sind.
Das Komma steht für ein logisches ODER, d.h. www
wird genau
dann ausgeführt, wenn mindestens eine der beiden Bedingungen, rechts oder
links vom Komma erfüllt ist.
Unter Bedingung sind folgende Angaben erlaubt:
sowie zusammengesetzte Bedingungen der Form
Zusammengestzte Bedingungen werden von links nach rechts ausgewertet.
Die Alternative oder zweiseitige bedingte Anweisung ermöglicht es, in Abhängigkeit von einer Bedingung entweder die eine oder die andere Befehlsfolge auszuführen.
Form der Alternative:
Vc < Bedingung www Vc / fff Vc >
Ist die Bedingung erfüllt, so wird www
, anderenfalls
fff
ausgeführt. Dabei stehen www
und fff
für beliebige Text- und Befehlsfolgen. Insbesondere sind hierin weitere
bedingte Anweisungen erlaubt.
Bedingung steht wiederum für einen Feldnamen, einen Vergleich oder eine zusammengesetzte Bedingung.
|
Stringvariable sind Hilfsspeicher, die über einen Namen ansprechbar sind,
und die beliebige Zeichenfolgen als Werte aufnehmen können. Sie gehören
nicht mit zum Datenbankobjekt.
Stringvariablen in der Verarbeitungssprache haben einbuchstabige Namen, die
durch ein $-Zeichen abgeschlossen werden. Zulässige Namen sind also:
a$ b$ c$ x$ y$ z$
Zu beachten ist, daß Variablennamen in jedem Fall mit Kleinbuchstaben geschrieben werden müssen.
Durch diese Namensbildung stehen dem Anwender genau 26 Stringvariable zur Verfügung.
Erfordert die Problemstellung mehr Hilfsvariable für Zeichenfolgen, so
muß man (zusätzlich) auf das Stringfeld oder Basic Variable zurückgreifen.
Stringvariable besitzen nicht automatisch einen Wert. Im Gegensatz zu den Datenbankfeldnamen,
über die immer automatisch auf die Feldinhalte des aktuell in Bearbeitung
befindlichen Objektes zugegriffen werden kann, erfolgen an die Stringvariablen
keine automatischen Zuweisungen, ebenso nicht an die im nachfolgenden Abschnitt
1.6. beschriebenen Zahlvariablen. Dies bedeutet aber auch, wenn einer Stringvariablen
einmal ein Wert zugewiesen wurde, dass dieser nicht bei Objektwechsel verändert
oder zerstört wird. Ausnahmen hiervon sind ausdrücklich beschrieben,
wie z.B. die Zuweisung von eventuell vorhandener Sortierzusatzinformation,
Zustandswerte in der Bearbeitung oder die Verbindung
mit Basic-Variablen.
Stringvariable können auch benutzt werden, wenn es (noch) kein aktuelles Objekt gibt, z.B. im Kopf und Fuß einer Verarbeitungsdatei.
Im folgenden steht der Begriff Variable stellvertretend für die bisher eingeführten Begriffe:
Zu den Variablen zählen ferner die in späteren Abschnitten eingeführten
A7 |
|
s$ |
A7::6 |
a$:5:3 |
t$:3 |
Die Ausgabe von Variablen, d.h. die Übernahme des (aktuellen) Variableninhalts in den zu erzeugenden Zielbaustein erfolgt durch den schon in 2.1. für Datenfelder eingeführten Befehl:
Vc Variable
Der Begriff Wert steht für folgende bisher eingeführte Bezeichnungen:
und ferner für
Beispiele für Werte sind also:
'abcefgh' Betrag ! 10 a$ % 5 % 10 |
Die Ausgabe von Werten erfolgt durch den Befehl:
Vc + Wert
Merke:
Sobald ein Variableninhalt nicht mehr unverändert ausgegeben werden soll,
auch wenn er nur mit Leerzeichen bis zu einer bestimmten Stelle aufgefüllt
wird, muß die Ausgabe mit Vc+ erfolgen.
Unter Konkatenation versteht man das Zusammenketten bzw. Hintereinanderschreiben von Zeichenfolgen. Bei allen Werten, die bisher aufgetreten sind, handelt es sich um Zeichenfolgen. Zwei Zeichenfolgen können miteinander durch das Plus-Zeichen verkettet werden. Als Ergebnis dieser Aktion erhält man eine Zeichenfolge, die aus allen Zeichen der beiden aneinandergefügten Zeichenfolgen besteht.
|
Mit der Wertzuweisung kann man Variablen jeglicher Art, also sowohl Stringvariablen als auch Datenbankfeldern neue Werte zuweisen.
Der zugehörige Befehl hat die Form:
Vc : Variable = Wert
Der rechts stehende Wert wird zunächst ermittelt (eventuelle Formatierung oder Konkatenation von anderen Werten). Die dabei gebildete Zeichenfolge wird der links stehenden Variablen als neuer Inhalt zugewiesen. Der bisherige Variablenwert wird dabei überschrieben.
Handelt es sich bei der Variablen um den Namen eines Datenfeldes, so bedeutet
die Zuweisung, daß das Datenbankobjekt verändert wird.
|
Durch Zuweisung an Stringvariable ist es insbesondere möglich, Größen über Objektwechsel hinweg zu merken.
|
Zahlvariablen besitzen einbuchstabige Namen ohne weitere zusätzliche Kennungen. Es stehen somit 26 Zahlvariablen mit den Namen
a b c d e f g h i j k l m n o p q r s t u v w x y z
zur Verfügung. Auch hierbei muß der Name in jedem Fall mit einem Kleinbuchstaben geschrieben werden.
Sollte die begrenzte Anzahl von 26 Zahlvariablen für das zu lösende Problem nicht ausreichen, so muß man entweder Zahlwerte auf Stringvariablen speichern (was aus anderen Gründen sowieso in vielen Fällen zwingend notwendig sein wird (siehe Abschnitt 1.8)), oder man muss das in 1.12. beschriebene 'Zahlfeld' mitbenutzen.
Die Werte von Zahlvariablen sind ganze Zahlen. Intern werden die Werte von Zahlvariablen als normale binäre Zahlen (32 Bit) abgespeichert. Sobald jedoch auf einen Variablenwert zugegriffen wird, wird dieser in eine Zeichenfolge umgewandelt.
Positive Werte werden dabei in mindestens 5-stellige Strings mit führenden Nullen gewandelt. Negative Werte werden 1 Zeichen länger dargestellt. Das 1. Zeichen ist dann das Minuszeichen. Diese Konvertierung findet jedesmal bei der Auswertung eines Variableninhaltes statt, so daß aus Anwendersicht Zahlwerte immer 5 bzw. 6-stellige Zeichenfolgen sind.
Insbesondere bei der Benutzung von Zahlvariablen in (String-) Vergleichen ist
daher Vorsicht geboten.
Zahlvariable können auf Verarbeitungssprachenebene überall dort benutzt
werden, wo ganze Zahlen erwartet werden, beispielsweise als Nummernangabe beim
Zugriff auf Mehrfachfelder, z.B.:
Vc + Adresse (i)
Unter Zahlzuweisung ist eine spezielle Form der Zuweisung von einfachen Zahlausdrücken an Zahlvariable zu verstehen. Sie hat die Form
Vc : Zahlvariable = Zahlwert Operator Zahlwert
Dabei steht Zahlwert stellvertretend für
Zulässige Operatoren sind
+ | Addition |
- | Subraktion |
* | Multiplikation |
/ | Division |
|
Man beachte die unterschiedliche Bedeutung des Operators + als normales Additionszeichen in der Zahlzuweisung und als Konkatenationsoperator in anderen Zusammenhängen, also z.B. bei der Zuweisung an Stringvariable.
|
Die Zuweisung der Form
Vc : Zahlvariable Operator Zahlwert
ist eine abkürzende Schreibweise für
Vc : Zahlvariable = Zahlvariable Operator Zahlwert
Statt Vc : i=i+1 kann man kürzer schreiben: Vc : i+1 (increment)
Statt Vc : i=i-1 kann man kürzer schreiben: Vc : i-1 (decrement)
Die Verarbeitungssprache kennt mehrere Zahl-Variablen mit fest vorgegebenen Namen, die spezielle Werte, Daten oder Zustandsgrößen liefern. Nachfolgend sind diese Variablen in alphabetischer Reihenfolge beschrieben.
Die Variable ANZ enthält die Anzahl der Datenbankobjekte, die bisher aus der DS-Datei bearbeitet wurden. Das aktuell in Bearbeitung befindliche Objekt wird dabei mitgezählt. ANZ liefert also eine bei 1 beginnende fortlaufende Numerierung. Diese Zahl entspricht auch der Anzahl der Durchläufe durch den Rumpf des Verarbeitungsprogramms.
liefert die aktuelle Benutzernummer
liefert zusammen mit den Variablen TAG und MONAT das aktuelle Tagesdatum aus.
siehe JAHR
NR enthält die Objektnummer des aktuell in Bearbeitung befindlichen Datenbankobjekts. Ferner ist es möglich, durch Zuweisung eines Wertes an die Variable gezielt auf ein Datenbankobjekt zuzugreifen. In dem Augenblick, in dem der Variablen NR ein (neuer) Wert zugewiesen wird, wird das Datenbankobjekt mit dieser Nummer eingelesen und kann bearbeitet werden. Existierte zu der Nummer noch kein Objekt, so wird eins kreiert. Auf diese Weise ist es möglich, in der Verarbeitung auch gezielt Neuerfassungen vorzunehmen.
Wird der Variblen NR der Wert -1 zugewiesen, so wird ein neues Objekt erzeugt, wobei die Objektnummer mit Hilfe des generellen Nummerngenerators bestimmt wird.
enhält die Nummer des Arbeitsplatzes, an dem die Verarbeitung läuft.
siehe JAHR.
liefert bei Schleifen den aktuellen Schleifenzähler
gibt die aktuelle Seitenposition in der Ausgabedatei an. Der Wert der Variablen wird bei jedem expliziten Seitenvorschub erhöht.
enthält den Status des letzten E/A-Vorganges. Dieser wird jedoch nur bei expliziten Dateizugriffen und Bildschirmanfragen durchgereicht, nicht aber beim normalen Schreiben in die Ausgabedatei oder beim Zugriff auf die auszuwertende DS-Datei.
liefert die aktuelle Ebenennummer
gibt die aktuelle Zeilenposition in der Ausgabedatei an. Der Wert der Variablen wird bei jedem expliziten Zeilenwechsel erhöht und bei Ausgabe eines expliziten Seitenvorschubs (FV) auf eins zurückgesetzt.
Für kommerzielle Berechnungen reichen die im vorigen Abschnitt behandelten Zahlvariablen nicht aus, zum einen, da es sich hierbei nur um ganzzahlige Werte handelt, zum anderen weil nur ein sehr eingeschränkter Wertebereich abgedeckt wird. Für kommerzielle Aufgabenstellungen gibt es daher andere Rechenmöglichkeiten.
An allen Stellen in den Befehlen der Verarbeitungssprache, wo ein Wert, sei es ein String- oder ein Zahlwert, erwartet wird, ist auch ein sogenannter numerischer Wert erlaubt. Ein numerischer Wert ist ein in runden Klammern eingeschlossener numerischer Ausdruck.
Achtung: Innerhalb von numerischen Ausdrücken, d.h. innerhalb von runden Klammern ist (fast) alles anders als außerhalb. Hier werden alle Angaben numerisch, d.h. ihrem Zahlwert entsprechend interpretiert. Dabei sind sowohl ganze Zahlen als auch Dezimalzahlen zulässig.
Aufbau eines numerischen Wertes: |
|
Ein numerischer Ausdruck kann ein einzelner Wert sein. Hierzu gehören: | |
|
|
Ferner können Zusammensetzungen bebildet werden: | |
|
|
Zulässige numerische Operatoren sind: | |
+ - * / |
|
sowie die Vergleichsoperatoren | |
= < > <> |
Innerhalb von runden Klammern werden alle Größen als Zahlen behandelt, und es werden die angegebenen arithmetischen Operationen ausgeführt.
Das numerische Ergebnis wird dann unter Beachtung einer eventuellen Formatangabe in eine Zeichenfolge gewandelt und steht in dieser Form außerhalb der runden Klammern zur Verfügung.
Ist kein Format angegeben, so wird das Ergebnis in eine möglichst kurze Zeichenfolge (insbesondere ohne führende Nullen) gewandelt.
Beim Arbeiten mit numerischen Werten gibt es also stets zwei Konvertierungsvorgänge. Zunächst wird der Zahlwert von allen Größen bestimmt, die im numerischen Ausdruck auftreten. Danach erfolgen geforderte Berechnungen und zum Schluß wird das numerische Ergebnis wieder in eine Zeichenfolge zurückgewandelt.
Zu beachten ist insbesondere die unterschiedliche Bedeutung des Plus- Zeichens
innerhalb und außerhalb von runden Klammern, einmal als Additions- und
zum anderen als Konkatenationsoperator.
|
Als Bedingung in bedingten Anweisungen hinter Vc<
sind auch in
runden Klammern eingeschlossene numerische Vergleiche zulässig. Hier werden
'echte' wertmäßige und nicht mehr zeichenweise Vergleiche ausgeführt.
|
Nach Berechnung des numerischen Wertes wird dieser in eine Zeichenfolge gewandelt. Normalerweise, d.h. wenn kein Format angegeben ist, wird dabei eine möglichst kurze Darstellung gewählt. Es ist jedoch möglich, hinter dem numerischen Ausdruck, von diesem durch ein %-Zeichen getrennt, eine Formatangabe zu machen. Diese muß die Form
Tausenderzeichen Anzahl Nachkommastellen
haben.
Das Tausenderzeichen gibt an, durch welches Zeichen Tausenderpositionen abgetrennt
werden. Erlaubte Angaben sind:
. | Punkt |
, | Komma |
' | Apostroph |
- | geschützter Leerschritt |
Die Wahl des Tausenderzeichens hat auch Auswirkungen auf das Dezimalzeichen. Ist das Tausenderzeichen ein Punkt, so ist das Dezimalzeichen das Komma, in allen anderen Fällen der Punkt.
Die Angabe des Tausenderzeichens darf entfallen. Die Tausenderstellen werden dann nicht abgetrennt. Als Dezimalzeichen wird das zuletzt durch Wahl eines Tausenderzeichens eingestellte Zeichen genommen. Voreingestellt ist das Dezimalkomma.
Als Anzahl der Nachkommastellen in der Formatangabe ist eine ganze Zahl anzugeben. Der Absolutbetrag dieser Zahl gibt die Stellenzahl an, auf die das Ergebnis gerundet wird. Ist die Formatangabe positiv, so werden schleppende Nullen hinter dem Dezimalzeichen entfernt, anderenfalls wird das Ergebnis in jedem Fall mit der geforderten Stellenzahl ausgeliefert.
Auch die Anzahl der Nachkommastellen bei der Formatangabe ist optional. Fehlt sie, so erfolgt bei Dezimalzahlen keine Rundung. Schleppende Nachkomma-Nullen werden jedoch entfernt.
|
Schleifen bestehen aus einem Schleifenanfang, der durch
Vc ;
gebildet wird, und einem Wiederholungsbefehl, der die Form
Vc .
hat.
Wird bei der Ausführung eines Verarbeitunsprogramms ein Wiederholungsbefehl erreicht, so wird die Abarbeitung beim letzten durchlaufenen Schleifenanfang fortgesetzt.
Eine normale Zählschleife kann also wie folgt realisiert werden:
|
|
Innerhalb des Schleifenrumpfes dürfen keine weiteren (einfachen) Schleifen auftreten. Will man mehrere Schleifen ineinander schachteln, so muß man die Form der nachfolgend beschriebenen schachtelbaren Schleife wählen.
Bei Schleifen, die ineinander geschachtelt werden sollen, muß sowohl beim Schleifenanfang wie auch beim Schleifenende ein Kennzeichen für die Schachtelungstiefe angegeben werden. Der Schleifenanfang sowie der Wiederholungsbefehl erhalten die Form
Schleifenanfang | Vc ; ; Schleifenkennung |
Wiederholungsbefehl | Vc . . Schleifenkennung |
Bei Erreichen eines Wiederholungsbefehles wird die Abarbeitung bei dem Schleifenanfang mit der gleichen Schleifenkennung fortgesetzt. Die Schleifenkennung ist eine Zahl zwischen 1 und 9.
Eine Schleife ohne Schleifenkennung darf nur in der innersten Verschachtelung benutzt werden.
Die Verarbeitungssprache kennt mehrere vordefinierte Funktionen, die String- oder Zahlwerte als Ergebnis liefern. Sie dürfen überall dort aufgerufen werden, wo ein Wert von dem entsprechenden Typ erwartet wird.
Nachfolgend sind die String-Funktionen in alphabetischer Reihenfolge beschrieben.
Der Aufruf von Auswahl erfolgt nach vorherigen Aufrufen der Prozeduren InitAuswahl und PutAuswahl und erzeugt ein Bildschirmfenster, in dem mittels Balkenauswahl ein Wert ausgewählt werden kann. Dieser Wert wird als Funktionsergebnis zurückgeliefert.
Die Prozedur BASIC integriert den DORADO Basic-Interpreter in die Verarbeitungssprache. Sie kann einen String-Parameter haben, der einen beliebigen BASIC-Befehl enthalten kan und liefert dann das Ergebnis des Basic-Befehls als Ergebnis zurück.
liefert das aktuelle Benutzerkürzel
As Parameter erwartet die Funktion CHR eine Zahl zwischen 0 und 255. Als Ergebnis wird das Zeichen mit dem entsprechenden ASCII-Wert ausgeliefert. Die Funktion wird benötigt, um Sonderzeichen wie z.B. Tabulatoren in Strings verarbeiten zu können.
erwartet eine Zeichenfolge als Parameter und liefert diese zurück, wobei alle Kleinbuchstaben in Großbuchstaben gewandelt werden.
Die Funktion CARD interpretiert ihren Parameter als CARDINAL- Zahl , auch wenn sie als INTEGER-Wert negativ ist, und liefert diese dann als Zeichenfolge zurück.
Es wird das aktuelle Datum in der Form tt.mm.jj zurückgeliefert
Es wird das aktuelle Tagesdatum zurückgeliefert, wobei der als Parameter angegebene Stringwert das Format festlegt.
Das Datum wird dabei folgendermaßen formatiert: der Formatstring wird von links nach rechts abgearbeitet. Dabei wird geprüft, ob an der aktuellen Position ein Stern (*) steht. Wenn nein, wird das Zeichen aus dem Formatstring in den Datumsstring übernommen. Steht jedoch ein Stern im Formatstring, so wird dieser übersprungen und das nachfolgende Zeichen wird gesondert wie folgt durch Datumsinformation ersetzt:
Buchstabe
|
Bedeutung
|
---|---|
t | es wird der aktuelle Tag so kurz wie möglich eingefügt, also ohne eine führende Null. |
T | der aktuelle Tag wird 2-stellig eingefügt |
m | es wird der aktuelle Monat so kurz wie möglich eingefügt |
M | der aktuelle Monat wird 2-stellig eingefügt |
j | das aktuelle Jahr wird 2-stellig eingefügt |
J | das aktuelle Jahr wird 4-stellig eingefügt |
N | der aktuelle Monat wird als Monatsname übernommen |
W | der Name des Wochentags wird eingefügt |
|
Der als zweiter Parameter angegebene Zahlwert wird als Tagesnummer (vgl. Funktion DAY in Abschnitt 1.9.3) interpretiert, das zugehörige Datum ermittelt und entsprechend der Vorgabe im ersten Parameter (siehe oben) formatiert.
|
Man erhält die aktuelle Datenbankanwahl als Funktionsergebnis.
Der Name DB ( ) wird auch als Prozedur, d.h. als Funktionsaufruf ohne Ergebnis benutzt, um innerhalb der Verarbeitung auf eine andere Datenbank zu wechseln.
Die Funktion liefert zu dem Objekt mit der Nummer objektnr aus der Datenbank db den Inhalt des Feldes feld.
|
Für die Parameter gilt folgende Syntax:
1.Parameter | db |
Zeichenfolge, die die Datenbank spezifiziert
|
2. Parameter | objektnr | Zahl oder Zahlvariable |
3. Parameter | feld | Name eines Feldes aus der Datenbank db |
Diese Methode, Inhalte aus anderen Objekten abzurufen, ist nicht nur übersichtlich, sondern auch schnell, sobald aus einem Objekt mehrere Inhalte benötigt werden. Dies liegt daran, dass ein Puffer zur Aufnahme der DB-Konfigurationen und der Objekte bereitgestellt wird. Ein weiterer Feldzugriff auf dasselbe Objekt führt also zu keinen weiteren Plattenlese- bzw. Netzwerk- Aktivitäten. Es können bis zu 5 verschiedene Datenbank-Konfigurationen im Speicher gehalten werden. Ein Objekt aus einer Datenbank bleibt solange im Speicher, bis auf ein anderes Objekt aus derselben Datenbank zugegriffen wird.
Die Stringprozedur FIELD bewirkt einen erweiterten Abruf von Feldinhalten beim Abruf von Bausteinen im Textsystem in Zusammenspiel mit integrierten Basic- Programmen.
Ein Aufruf der Form
Vc+FIELD ( feldname )
sorgt beim Bausteinabruf dafür, daß zunächst ein versteckter Text-Befehl der Form
DP<#procFELD(feldnr) DP>
erzeugt wird, wobei feldnr die Nummer des angegebenen Feldes ist.
Direkt dahinter wird der Feldinhalt ausgegeben. Ist das Datenbankfeld leer,
so wird stattdessen ein STP
-Zeichen erzeugt.
Diese Stringprozedur ist dazu da, lesbare Abrufbausteine für spezielle Textapplikationen zu erstellen, bei denen während der Dokumentenerfassung komplexere Aktionen wie z.B. dialoggesteuerte Rückschreibungen in das Datenbankobjekt mittels integrierten Basic-Programmen erfolgen.
liefert den Namen der aktuellen Datei. Dies ist innerhalb der eigentlichen DORADO-Verarbeitung der Name der Ausgabedatei bzw. bei Benutzung innerhalb des Bausteinabrufs im Textsystem der Name des in Bearbeitung befindlichen Dokuments.
liefert die Platznummer als Zeichenfolge.
liefert die aktuelle Uhrzeit in der Form hh:mm:ss
liefert den Parameter ohne führende und schleppende Leerzeichen aus.
wie TRIM, entfernt aber nur die hinteren Leerzeichen.
wie TRIM, entfernt aber nur die vorderen Leerzeichen.
liefert den Parameterwert unterstrichen zurück.
Rein formal sind die Prozeduren der Verarbeitungssprache Funktionen, d.h. auch sie liefern ein Ergebnis, also einen Wert. Als Ergebniswert wird dabei jeweils ein Leerstring zurückgeliefert, so daß nachfolgende Prozeduren eigentlich auch Stringfunktionen sind.
Prozeduren liefern also keinen vernünftigen Wert zurück, sondern ihr Nutzen und Zweck liegt darin, auf die Systemumgebung Einfluß zu nehmen.
Der Aufruf von Prozeduren erfolgt normalerweise in der Form
Vc + procname ( )
bzw.
Vc + procname (parameter)
Nachfolgend sind alle Prozeduren in alphabetischer Reihenfolge aufgeführt. Die Prozeduren, die sich mit Bildschirmoperationen befassen, sind im Kapitel 1.10 ausführlich beschrieben und hier nur der Vollständigkeit halber aufgeführt.
Die Prozedur BASIC integriert den DORADO Basic-Interpreter in die Verarbeitungssprache.
Die Prozedur CTL erwartet einen Stringwert als Parameter, der als Dateiname interpretiert wird . Die angegebene Datei wird als Kontrolldatei aktiviert, d.h. der Inhalt der Datei wird als Tastatureingabe ausgewertet. Bei Aufruf innerhalb der DORADO Verarbeitung wird die Kennung für Ablaufdateien vorgekettet.
stellt die aktuelle Datenbank um.
Mit diesem Befehl kann für die Verarbeitungsausgabe ein Format vereinbart werden. Dazu wird der Name einer Formatdatei angegeben,
Sobald ein Format vereinbart ist , so wird dieses ausgewertet, d. h. bei der Ausgabe von (echten!) Zeilenvorschüben wird insbesondere geprüft, ob das im Format vereinbarte Textende überschritten wird. Wenn ja wird ein Seitenvorschub erzeugt.
Bei der Ausgabe von Seitenvorschüben (insbesondere auch bei denen, die auf Grund des Formats erzeugt werden) wird zunächst ein evtl. vereinbarter Fussbaustein interpretiert. Ebenso wird am Anfang einer Seite ein vereinbarter Kopfbaustein ausgewertet. Erfolgt der Format-Befehl in der ersten Zeile auf der ersten Seite, so wird zunächst der Kopfbaustein der 1. Seite abgehandelt.
|
Die Formatauswertung funktioniert nur bei Listen mit festen Zeilenvorschüben. Alle Ausgaben werden seitens der Verarbeitung als 1-zeilig betrachtet, d.h. Zeilenabstandsänderungen per DP-Sequenz werden nicht berücksichtigt.
Der Format-Befehl ist prinzipiell in allen Verarbeitungszusammenhängen zulässig, aber nicht immer sinnvoll (wie z.B. in der Verarbeitung des Spoolers). Er ist in erster Linie dazu gedacht, durch Verarbeitung erstellte Textbaustein- Listen mit einer logischen Seitenstruktur zu versehen. Zum anschliessenden Drucken wird dann (wie bisher auch) ein weiteres Format benutzt, wobei dieses Druckformat so gestaltet sein sollte bzw. sein muss, dass der Inhalt einer 'Verarbeitungsseite' komplett in den Bereich von Textanfang bis Textende des Druckformats passt.
Die Funktion image ermöglicht das Anzeigen von Bildern aus der Verabeitung heraus. Die Funktion hat einen Parameter, nämlich den Namen der Bilddatei.
|
Die Prozedur InitAuswahl bereitet eine Balkenauswahl vor.
Die Prozedur KBput erwartet einen Stringwert als Parameter, der als Eingabesimulation interpretiert wird.
Die Prozedur PutAuswahl meldet einen möglichen Wert für eine Balkenauswahl an.
setzt den Bildschirmrollbreich auf den durch ZeileOben und ZeileUnten beschriebenen Bereich. Als Parameter dürfen beliebige Werte angegeben werden, die einen Zahlwert zwischen 1 und der maximalen Zeilenzahl des Bildschirms liefern. Ferner muß ZeileOben kleiner als ZeileUnten sein.
Mit Hilfe der Prozedur START kann aus einem Verarbeitungsprogramm heraus in einer freien Ebene ein beliebiges Programm als Stellvertreter gestartet werden.
|
Der erste Parameter darf ein Leerstring sein. In diesem Fall entscheidet das unterliegende Windows-Betriebssystem auf Basis seiner Registry, welches Programm gestartet wird.
Als dritter Parameter ist ein Stringparameter möglich, der falls vorhanden als Sprachschlüssel ausgewertet wird. Folgende Sprachschlüssel gibt es:
b | für MultiDOS-Basicprogramm |
B | für Batchdatei |
P | für sonstiges MSDOS- bzw. Windowsprogramm |
Es wird ein Bildschirmfenster definiert.
Nachfolgend sind die Funktionen in alphabetischer Reihenfolge beschrieben, die eine Zahl als Ergebnis zurückliefern.
Aus dem aktuellen Tagesdatum bzw. dem als Parameter angegebenem Datum wird eine eindeutige Tagesnummer ermittelt, die z.B. zum Berechnen von Fristen benutzt werden kann (vgl. Stringprozedur DATE).
Bei der Ausgabe von Teilstrings und bei Ausschnittsbildung wird grundsätzlich zeichenorientiert gearbeitet. Strings mit Attributen oder Zeichen aus dem 2. 3. oder 4. DORADO-Zeichensatz enthalten neben den 'sichtbaren' Zeichen Steuersequenzen zur Attribut bzw. Zeichensatzumstellung. DPlen liefert die Stringlänge, die bei der Ausgabe zur vorgegebenen 'sichtbaren' Länge führt.
erwartet als Parameter den Namen eines Mehrfachfeldes. Zurückgeliefert wird der Index des ersten nicht besetzten Elementes. Sind alle Feldelemente besetzt, so ist der Funktionswert 0.
Die Funktion INSTR überprüft, ob der rechte Wert als Teilstring im linken Wert enthalten ist. Wenn ja, so wird dessen Anfangsposition, anderenfalls eine 0 zurückgeliefert. Über den dritten Parameter kann gesteuert werden, ab welcher Position der String durchsucht werden soll.
Ist der dritte Parameter positiv, so gibt er die Anfangszeichenposition fürs Suchen an. Ist er negativ, so wird darüber gesteuert, wie oft der Teilstring im Ausgangsstring gesucht werden soll, und erst die Anfangsposition des wiederholten Auftretens wird als Funktionsergebnis zurückgeliefert.
|
liefert die Länge der Zeichenfolge, d.h. die Anzahl der Zeichen, die als Parameter angegeben ist.
erwartet als Parameter den Namen eines Mehrfachfeldes. Zurückgeliefert wird die Nummer des letzten Elementes.
ermöglicht das Suchen von Objekten in anderen Datenbanken. Einzelheiten sind in Kapitel 1.13. beschrieben.
Die Bildschirmausgabe ermöglicht es, gezielt einzelne Daten während der Verarbeitung auf dem Bildschirm anzuzeigen. Dies erfolgt durch einen Befehl, zu dem es drei Varianten gibt
Der angegebene Wert wird auf dem Bildschirm ausgegeben. Bei der ersten Form erfolgt die Ausgabe im allgemeinen in der letzten Bildschirmzeile, was zusätzlich ein Hochrollen des bisherigen Schirminhaltes mit sich bringt.
Um die Ausgabe gezielt an eine Stelle zu lenken, ist es möglich, eine Bildschirmposition anzugeben. Diese muß die Form
Zeilennummer
oder
Zeilennu
mmer , Spaltennummer
haben. Dabei können Zeilennummer und Spaltenummer beliebige Zahlwerte sein.
Durch Angabe eine Prozentzeichens hinter der Bildschirmposition wird zusätzlich
der Bildschirm ab der angegebenen Position gelöscht.
|
Bei der Bildschirmeingabe werden die eingegebenen Zeichen unverändert in die Ausgabedatei übernommen. Den zugehörigen Befehl gibt es ebenfalls wieder in mehreren Varianten:
Es wird die unter Text angegebene Zeichenfolge auf dem Bildschirm ausgegeben. Danach wird eine Eingabe angefordert. Die maximale Eingabelänge kann begrenzt werden. Das Eingabefeld wird durch Pünktchen gekennzeichnet. Ebenso kann die Position, ab der die Textausgabe erfolgt festgelegt werden. Bei der vierten Variante wird zusätzlich der Bildschirm ab der spezifizierten Position gelöscht.
Hierbei handelt es sich um Bildschirmeingaben, die jedoch nicht unverändert in die Ausgabedatei übernommen werden, sondern an eine (String-) Variable zugewiesen werden.
Die Zuweisung erfolgt durch einen Befehl der Form:
Vc : Variable = ? ....
Rechts vom Fragezeichen ist alles zulässig, was auch bei normaler Bildschirmeingabe erlaubt ist. Auch die Wirkung ist die gleiche. Der einzige Unterschied besteht darin, daß die Eingabe nicht in die Ausgabedatei übernommen, sondern der links stehenden Variablen zugewiesen wird.
Bei der Bildschirmausgabe kann mit Fenstern gearbeitet werden. Dazu können gleichzeitig bis zu 9 verschiedene Bildschirmausschnitte als Fenster definiert werden.
Es ist jedoch darauf zu achten, daß bei der Definition eines Fensters grundsätzlich keine Sicherung des überlagerten Bildschirminhalts erfolgt.
Die Definition eines Windows erfolgt durch den Aufruf der Funktion
window
Die Funktion besitzt (maximal) 7 Zahl-Parameter mit folgender Bedeutung:
Parameter
|
Bedeutung/Wert
|
---|---|
Fensternummer | Nummer zwischen 0 und 9 |
oben unten |
obere und untere Zeile des Bildschirmausschnitts, Zeilenangaben müssen zwischen 0 und der maximal sichtbaren Zeilenummer liegen |
links rechts |
linke und rechte Spalte des Bildschirmausschnitts Spaltenangaben müssen zwischen 1 und der maximal möglichen Spaltenzahl (=127) liegen. Die rechte Spalte sollte jedoch möglichst kleiner als die maximale Spaltenzahl sein, die der Bildschirm zu |
Rahmen | 0, ohne Rahmen ungleich 0, mit Rahmen |
Hintergrund |
Zahl, über die der Hintergrund gesteuert wird. Ausgewertet werden z.B. die Angaben 0 für Normalhintergrund |
Die Angabe der Fensternummer ist obligatorisch. Die übrigen Parameter dürfen fehlen. Sie werden dann durch 0 ergänzt.
Sind beim Window-Befehl Zeilen und Spaltenangaben vorhanden, so handelt es sich um die Neudefinition eines Fensters. Der entsprechende Bildschirmausschnitt wird mit dem spezifizierten Hintergrundattribut vorgelöscht, eventuell ein Rahmen gezeichnet, und der Cursor wird in die linke, obere Fensterecke gesetzt.
Alle nachfolgenden Bildschirmausgaben bis zum nächsten WINDOW-Befehl erfolgen in dem aktuellen Bildschirmfenster. Auch Cursorpositionierungen und Rollbereichsdefinitionen beziehen sich auf das gerade eingestellte Fenster.
Wird beim Window-Befehl nur die Fensternummer und sonst nichts angegeben, so wird das so angesprochene Fenster zum aktuellen gemacht, in das weitere Bildschirmausgaben gelangen. Natürlich muß das Fenster vorher definiert worden sein.
Das Fenster mit der Nummer 0 ist das sogenannte Grundwindow, d.h. der Standard- Arbeitsbildschirm. Es existiert immer und kann nicht umdefiniert werden.
Die im DORADO übliche Balkenauswahltechnik steht auch als Sprachmittel in der Verarbeitung zur Verfügung.
Die Benutzung der Balkenauswahl erfolgt in drei Schritten:
Dies erfolgt durch die Anweisung
Vc + initauswahl ( zeile, spalte )
Durch Angabe von zeile und spalte wird die linke obere Ecke des Auswahlfensters bestimmt.
Als dritter Parameter kann zusätzlich eine Fensterüberschrift mitgegeben werden:
Vc + initauswahl ( zeile, spalte, Überschrift )
Der Verarbeitungsbefehl
Vc + putauswahl (anzeigewert, rückmeldewert)
definiert ein Wertepaar für die Balkenauswahl. Der vereinbarte anzeigewert wird im Auswahlfenster angezeigt. Beim rückmeldewert handelt es sich um die Zeichenfolge, die zurückgeliefert wird, wenn der zugehörige auswahlwert vom Anwender ausgewählt worden ist. Wird als rückmeldewert ein Leerstring angegeben oder fehlt er sogar ganz, so wird der auswahlwert als Ergebnis zurückgeliefert.
Es können im Rahmen des zur Verfügung stehenden Speichers beliebig viele Auswahl-Paare eingetragen werden.
Die eigentliche Balkenauswahl erfolgt durch:
Vc : stringvariable = auswahl ( )
Zunächst wird das Auswahlfenster angezeigt, und zwar automatisch in der benötigten Breite. Die ersten Auswahlwerte werden angezeigt, maximal bis der untere Bildschirmrand erreicht ist.
Anschließend kann der Anwender den inversen Auswahlbalken mittels Maus oder mit den Pfeiltasten auf das gewünschte Auswahlelement positionieren und mit der CR- Taste bzw. durch Klicken mit der linken Maustaste auswählen. Daraufhin wird der zugehörige Rückmeldewert zurückgeliefert.
Die Balkenauswahl kann mit der Escape Taste verlassen werden. In diesem Fall wird ein Leerstring zurückgeliefert. Mit welcher Taste die Auswahl abgeschlossen wurde, kann ferner über die Variable STAT erfragt werden. Das Balkenauswahlfenster wird anschließend automatisch entfernt und der vorige Bildschirminhalt wiederhergestellt.
|
Die Prozedur PutAuswahl prüft selbst, ob der Parameter für den Anzeigewert definiert ist. Bei leerem Anzeigewert wird der Aufruf ignoriert. Die Prozedur Auswahl prüft anschließend, ob überhaupt ein gültiger Anzeigewert vorhanden ist. Wenn nein, unterbleibt die Balkenauswahl. Als Funktionswert wird ein Leerstring zurückgeliefert und die Variable STAT erhält den Wert 99 (Formaler Fehler).
Normalerweise werden die von der Verarbeitungssprache erzeugten Ausgaben in eine Datei geschrieben, nämlich seitens des Verarbeitungsprogramms in die angegebene Ausgabedatei oder innerhalb des Textsystems in das gerade in Bearbeitung befindliche Dokument.
Innerhalb des Verarbeitungsprogramms kann man nun dafür sorgen, daß alle nachfolgenden Ausgaben nicht in eine Datei, sondern auf den Bildschirm geschrieben werden. Dies erfolgt durch den Befehl:
Vc -> '*C'
Ab sofort werden alle Ausgaben auf dem Bildschirm ausgegeben. Durch
Vc -> ' '
kann man die Ausgabe wieder auf die zuvor eingestellte Ausgabedatei zurückstellen.
Mit Hilfe des Befehls Vc -> ... kann die Ausgabe auch auf andere Medien umgestellt werden.
Durch den Aufruf der Prozedur
ROLLR ( oben, unten )
kann der Rollbereich auf dem Bildschirm eingestellt werden. Dazu wird die obere sowie die untere Zeile des Rollbereichs angegeben.
Normalerweise umfaßt der Rollbereich den gesamten Bildschirm außer der obersten Bildschirmzeile. Der Rollbereich zeichnet sich dadurch aus, daß bei Ausgabe einer Zeilenschaltung in der untersten Zeile des Rollbereich alle Zeilen des Rollbereichs um eine Zeile nach oben geschoben werden. Die oberste Zeile verschwindet dabei.
Es ist möglich, komplette Dateien, Abschnitte oder einzelne Sätze aus Dateien in den Zielbaustein bzw. das akuelle Dokument einzufügen. Dies erfolgt durch die Befehle:
(1) Vc ! Dateiname
(2) Vc ! Dateiname ( Satznummer )
(3) Vc ! Dateiname ( von - bis )
Satznummer, von und bis sind hierbei beliebige Zahlwerte.
Dateiname steht hier für einen Wert, also beispielsweise eine Stringvariable.
Dieser Wert muß einen gültigen MultiDOS-Dateinamen liefern, der i.a.
als Name eines Textbausteins auf dem Systemlaufwerk interpretiert wird.
Der Dateiname kann (hier wie überall in der Verarbeitungssprache, wo ein
Dateiname erwartet wird) entprechend den folgenden Konventionen für Dateinamen
zusätzlich Angaben zum Dateityp und zum Laufwerk enthalten:
Bedingungen für einen gültigen Dateinamen:
|
|
---|---|
1. | Der String für den Dateinamen ist genau 21 Zeichen lang. |
2. | Der eigentliche Name muß genau 15 Zeichen lang sein und eventuell mit Leerzeichen aufgefüllt werden. |
3. | An Stelle 17 steht die Laufwerksangabe (0 bedeutet Systemlaufwerk) |
4. |
die Stellen 19 bis 21 sind für den Dateityp vorgesehen, der genau dreistellig mit führenden Nullen angegeben werden muß.
|
Es ist möglich, einzelne Sätze aus einer Datei auf Variablen zuzuweisen. Dies erfolgt durch den Befehl:
Vc : Variable = ! Dateiname ( Satznummer )
Für den Dateinamen und die Satznummer gilt das im vorigen Abschnitt Gesagte.
Ein einzulesender Satz kann statt über eine Satznummer auch über einen Suchstring identifiziert werden. Der Befehl hierzu lautet:
Vc:stringvariable = ! ! dateiname (Suchschlüssel)
Eingelesen wird jetzt der Satz, der mit dem angegebenen
Suchschlüssel (gefolgt von einem Tabulator) beginnt.
|
Die Befehle
Vc ! Dateiname ( Satznummer ) = Wert |
Vc ! Dateiname = Wert |
ermöglichen es, gezielt einzelne Sätze in einer Datei zu verändern (obere Variante) oder ans Dateiende anzuhängen (zweite Variante).
Bei der Veränderung eines einzelnen Satzes handelt es sich um ein echtes Update der Datei, d.h. alle anderen Sätze der Datei bleiben unverändert. Ist die zu erzeugende Satznummer größer als die höchste bisher existierende, so werden entsprechend viele Leersätze mit erzeugt.
|
Durch den Befehl
Vc -> Dateiname
kann die Ausgabe der Verarbeitung in eine andere Zieldatei gelenkt werden. Alle nachfolgend erzeugten Ausgaben werden dann in diese Datei geschrieben. Der bisherige Dateiinhalt wird dabei überschrieben.
Durch
Vc ->> Dateiname
wird ebenfalls die Ausgabe umgestellt. Die neu erzeugten Ausgaben werden jedoch an den bisherigen Dateiinhalt angehängt.
Durch den Befehl
Vc -- Dateiname
wird die angegebene Datei gelöscht.
|
Vor dem Löschen von Dateien wird allerdings der Dateityp überprüft. Handelt es sich dabei um einen Standard- Dateityp für Datenbank-Objektdateien (z.Zt.: Typ 1, 21, 31), so wird das Löschen mit dem Fehlerstatus 99 abgelehnt, um Datenbank- Inkonsistenzen zu verhindern.
Reichen die 26 Stringvariablen a$ bis z$ der Verarbeitungssprache nicht aus, so kann man auf ein Stringfeld zurückgreifen. Das Stringfeld wird angesprochen über ein unterstrichenes STP-Zeichen. Der Zugriff auf ein bestimmtes Feldelement erfolgt dadurch, daß hinter dem STP-Zeichen direkt die Nummer des Feldelementes angegeben wird. Das erste Feldelement besitzt den Index 1.
Vor der ersten Benutzung des Stringfeldes muß dessen maximale Größe deklariert werden. Dies erfolgt durch die Anweisung
Vc-STP ( Anzahl )
Es handelt sich hierbei um einen Dimensionierungsbefehl. Es wird jedoch nicht die Größe einer einzelnen Stringvariablen festgelegt, sondern es wird nur mitgeteilt, wieviele Feldelemente maximal benutzt werden.
Reichen die 26 Zahlvariablen a bis z nicht aus, so kann man, ähnlich wie bei den Stringvariablen, auf ein Feld, das Integerfeld, zurückgreifen. Das Integerfeld wird angesprochen über ein Paragraphzeichen. Der Zugriff auf ein bestimmtes Feldelement erfolgt dadurch, daß hinter dem Paragraphzeichen direkt die Nummer des Feldelementes angegeben wird. Das erste Feldelement besitzt den Index 1.
Vor der ersten Benutzung des Integerfeldes muß dessen maximale Größe deklariert werden. Dies erfolgt durch die Anweisung
Vc - § ( Anzahl )
Hiermit wird die Nummer des höchsten angesprochenen
Feldelementes festgelegt.
Mittels Vc § (i) wird das i-te Element des Integerfeldes ausgegeben.
Durch den Befehl
Vc - Stringvariable
kann man eine Stringvariable reservieren, d.h. sie darf nur noch innerhalb eines Verarbeitungsprogramms verändert werden.
Ein versehentliches Überschreiben des Inhalts beispielsweise durch die Hilfsspeicher-Funktion im Bearbeiten ist damit ausgeschlossen.
Es besteht die Möglichkeit, innerhalb der DORADO- Verarbeitungssprache die aktuell eingestellte Datenbank zu wechseln. Diese Leistung steht sowohl in der normalen Verarbeitung als auch in der Hintergrundverarbeitung der Bearbeitung und im Text zur Verfügung.
Die Umstellung der Datenbank erfolgt über den Aufruf der Prozedur
db ( anwahl )
Sobald dieser Befehl durchlaufen wird, geschieht folgendes:
1. Handelt es sich um den ersten Befehl zum Wechseln der Datenbank, so wird in der Bearbeitungs- Verarbeitung die gesamte aktuelle Datenbank-Umgebung gesichert. Anderenfalls wird geprüft, ob das aktuelle Objekt geändert worden ist. Wenn ja, wird es geschrieben.
2. Es wird die als Parameter angegebene Datenbank eingestellt. Die aktuelle Objektnummer wird auf 0 gesetzt.
Sinnvollerweise muß danach ein Objekt eingelesen werden. Dies erfolgt (wie bereits bisher möglich) über den Befehl
Vc : nr = objektnr
Im Text und der 'normalen' Verarbeitung muß im Verarbeitungsprogramm selbst dafür gesorgt werden, daß falls erforderlich, in die vorherige Datenbank zurückgekehrt wird. Dies gilt insbesondere bei der Abarbeitung einer DS-Datei.
Handelt es sich um eine Hintergrundverarbeitung zur Bearbeitung, so wird am Verarbeitungsende automatisch die vorher gültige Datenbankumgebung, insbesondere der aktuelle Objektzustand wiederhergestellt. Dadurch ergibt sich aber auch, daß innerhalb eines Verarbeitungsprogramms nach einem Datenbank- Umstellbefehl keine Veränderungen des aktuellen Datenbank-Objekts mehr möglich sind.
|
Am Ende der Verarbeitungsausführung wird automatisch an 'die richtige Stelle' in der Vertragsdatenbank zurückgekehrt.
Anmerkung: Die Prozedur db kann auch ohne Parameter aufgerufen werden und liefert dann die aktuelle Datenbank-Anwahl als Funktionsergebnis.
Die Verarbeitungssprache ermöglicht das Suchen von Inhalten in anderen Datenbanken über den sogenannten Direktaufruf. Dazu stehen drei Funktionen zur Verfügung, die jeweils ein Zahlergebnis liefern:
Vor dem ersten Direktaufruf muß mit Hilfe dieser Funktion mitgeteilt werden, in welcher Datenbank und über welches Feld gesucht werden soll. Dazu müssen die Datenbank-Anwahl und der Feldname angegeben werden.
Darüber hinaus muß eine Zugriffsnummer angegeben werden, die bei nachfolgenden Such-Aufrufen die Zuordnung zu der in diesem Aufruf vereinbarten Datenbank-Feld Kombination herstellt. Die Zugriffsnummer ist eine Zahl zwischen 1 und 10.
Als Funktionsergebnis wird immer 0 zurückgeliefert. Existieren die angegebene Datenbank oder das Suchfeld nicht, so hat anschließend die Variable STAT den Wert 16.
Die unter Inhalt angegebene Suchzeichenfolge wird gesucht. Vor dem ersten Aufruf von XFIRST muß ein XINIT Aufruf mit derselben Zugriffsnummer vorangegangen sein. Dadurch wird festgelegt, in welcher Datenbank und nach welchem Feld gesucht wird.
Die Funktion XFIRST liefert als Ergebnis die Nummer des ersten gefundenen Objekts bzw. 0, wenn nichts gefunden worden ist.
Beim XNEXT wird das nächste Objekt mit derselben Suchbedingung gesucht, die zuletzt beim XFIRST angegeben worden ist. Die zugehörige Objektnummer wird als Funktionsergebnis zurückgeliefert. Sobald kein Objekt mehr gefunden wird, erhält man als Ergebnis 0.
In der Verarbeitungssprache kann man auf den gesamten Sprachumfang des DORADO-Basic-Interpreters zurückgreifen. Die erfolgt durch des Aufruf der Prozedur
Vc+basic(Basicbefehl)
bzw. durch
Vc+basic
Durch den Prozeduraufruf ohne Parameter wechselt die Verarbeitung in den Basic-Modus.
Von nun an wird die Verarbeitungsquelle solange als Basic-Programm interpretiert
bis das nächste Vc
Zeichen kommt.
Beim Aufruf mit Parameter muss der BASIC- Befehl muß genauso aufgebaut sein wie ein Befehl, der im reinen BASIC- Interpreter in der Grundstufe von der Tastatur her eingegeben werden kann.
|
Von einem Aufruf des Basic-Interpreters bis zum nächsten bleiben alle Variablen des Basic-Programms erhalten.
Die Verarbeitungsvariablen
a .. z und a$ .. z$
entsprechen genau den Basic-Variablen
A .. Z und A$ .. Z$
Ihre Inhalte werden automatisch in beiden Richtungen (von der
Verarbeitung zum Basic und zurück) durchgereicht. Ebenso entspricht die
Verarbeitungsvariable STAT
dem Wert der Basic-Variablen status
(ebenfalls in beiden Richtungen).
Die hinter dem Basic-Aufruf stehenden Teile der Verarbeitungs-Datei können bei Bedarf mittels
input / line input
von dem Basic-Programm gelesen werden. Wenn die Fehlervariable status dabei nicht 0 ist, so war das Ende der Verarbeitungs-Folge erreicht. Die vom Basic gelesen Teile werden anschließend natürlich nicht mehr von der Verarbeitung abgearbeitet.
Mit Hilfe von
print
kann das Basic-Programm beliebigen Text erzeugen, der in die Ausgabe der Verarbeitung eingefügt wird. Das ist insbesondere nützlich beim Aufruf im Text, denn so kann das Basic-Programm während des Abrufes Zeichen generieren, die wirken, als wenn sie mit in der abgerufenen Datei gestanden hätten.
Wenn ein Basic-Programm geladen und gestartet wird (loadgo/run), so kommt die Verarbeitung und somit das zugrundeliegende Programm (Textsystem oder Dorado) erst wieder an die Regie, wenn das Basic-Programm sich beendet. Nach dem Ende bleiben jedoch die Variablen und die Prozeduren definiert, so daß danach die Basic- Funktionen und Prozeduren aufgerufen werden können.
Wenn eine Basic-Prozedur aufgerufen wird, so läuft die Verarbeitung erst weiter, wenn die Prozedur zurückkehrt (fnend/fnreturn). Der letzte String-Funktionswert des aufgerufenen Basic-Programms wird als Ergebnis der Verarbeitungsprozedur BASIC zurückgeliefert.
Wenn beim Aufruf der Prozedur BASIC bereits ein Dorado-Objekt im Zugriff ist, so steht das aktuell bearbeitete Dorado-Objekt sofort im Basic zur Verfügung und kann auch direkt im Basic verändert werden mit
dorado field( .. )
Es muß also weder die Datenbank eingestellt noch das Objekt eingelesen werden. Auch um das Rückschreiben muß sich das Basic-Programm nicht kümmern.
In der Verarbeitung der Dorado-Bearbeitung gilt zusätzlich: Wenn in dem Basic-Programm die Datenbank gewechselt wird, wird automatisch das gerade bearbeitete Objekt gesichert (noch nicht auf die Platte geschrieben). Durch den Basic-Befehl
dorado=""
werden Datenbank und Objekt wieder restauriert, ansonsten geschieht dies automatisch bei der Rückkehr in die Bearbeitung. Außerhalb der Dorado-Bearbeitung muß das Basic-Programm selber dafür sorgen, daß bei Rückkehr in die Verarbeitung die ursprüngliche Datenbank eingestellt ist, wenn dies für die nachfolgende Verarbeitung erforderlich ist.
Zum Testen und zur Programmier-Erleichterung gibt es den Spezial-Aufruf
Vc+basic( )
Damit wird der eingebaute Basic-Interpreter in der Dialog-Grundstufe aufgerufen. Man kann dann z.B. alle Basic-Variablen ansehen (lvar), Programmänderungen vornehmen (auch der Befehl edit geht) und sonstige Manipulationen vornehmen. Alle Änderungen stehen sofort in dem zugrundeliegenden Programm als Teil des laufenden Basic-Programms zur Verfügung. Auch hier ist es natürlich empfehlenswert, das Basic-Programm regelmäßig nach Änderungen zu sichern.
Zu beachten ist, daß Programmierfehler in dem Basic-Programm (z.B. Endlos-Schleifen) das zugrundeliegende Programm (Text/Dorado) zum Hängenbleiben oder zum Absturz bringen können.
Diese Erweiterung um die Sprache BASIC soll nicht die Verarbeitungssprache ersetzen. Für einfache Anwendungen ist und bleibt diese die erste Wahl: die Anwendung von Basic in der Verarbeitung ist nur für erfahrene Dorado-Programmierer und komplexe Anforderungen gedacht.
Die übliche sequentielle Abarbeitung kann durch explizite Sprungbefehle unterbrochen und an einer durch ein Label markierten Stelle fortgesetzt werden.
Den Goto-Befehl gibt es in drei Varianten:
(1) | Vc & wert |
(2) | Vc &- wert |
(3) | Vc &+ wert |
Es sind beliebige (String-) Werte zugelassen, insbesondere auch Ausdrücke und Variable. Der angebene Wert wird als Sprungziel interpretiert, d.h. es wird ein zugehöriges Label gesucht und dort die Verarbeitung fortgesetzt. Das Setzen eines Labels erfolgt durch:
Vc " Zeichenfolge
Die Zeichenfolge muß durch eine Zeilenschaltung
beendet werden. Diese Zeilenschaltung gehört nicht zum Namen des Labels,
wird aber noch dem Labelbefehl zugerechnet. D.h. einerseits wird die Zeilenschaltung
nicht in die Ausgabedatei übernommen, andererseits muß (und darf)
aber die Zeichenfolge, die beim Goto das Sprungziel kennzeichnet, keine Zeilenschaltung
enthalten.
Die drei Varianten des Sprungbefehles unterscheiden sich voneinander durch verschiedene Verfahren, mit denen das Sprungziel gesucht wird.
Beim einfachen Goto mit dem Befehl Vc &
beginnt die Labelsuche
direkt hinter dem Sprungbefehl und endet spätestens bei einem leeren Label,
beim Dateiende oder bei dem angegebenen Label. Ist das letztere der Fall, so
wird hier die Verarbeitung fortgesetzt, anderenfalls wird mit der Programmausführung
hinter dem Goto-Befehl fortgefahren.
Beim Vc&+
wird genauso verfahren, aber die Suche endet nicht
bei einem Leerlabel. Die dritte Variante mit dem Minus-Zeichen unterscheidet
sich hiervon nur dadurch, daß die Labelsuche beim Dateianfang aufgenommen
wird, und damit auch Rückwärtssprünge möglich sind.
Bei Sprüngen aus (verschachtelten) bedingten Befehlen (IF-Anweisungen) ist darauf zu achten, daß das Sprungziel dieselbe Schachtelungstiefe besitzt. Anderenfalls können nachfolgend ausgeführte bedingte Anweisungen nicht mehr korrekt abgearbeitet werden. Unter Umständen muß um das Sprungziel einfach eine Bedingungsanweisung, die keine weiteren Befehle enthält, eingefügt werden.
Der CALL-Befehl ermöglicht es, innerhalb eines Verarbeitungsprogramms andere Verarbeitungsdateien quasi als Unterprogramme aufzurufen. Der zugehörige Befehl hat die Form
Vc=Dateiname
Als Dateiname muß wieder ein Stringwert angegeben
werden, der einen gültigen Dateinamen im Sinne des MultiDOS-Systems liefert.
Innerhalb der gerufenen Datei dürfen beliebige Texte und Verarbeitunsanweisungen stehen. Es wird zunächst der komplette Inhalt dieser Datei abgearbeitet, d.h. Texte werden unverändert (wie beim Anketten von Dateien) in die Ausgabedatei übernommen. Darüberhinaus werden aber auch alle Befehle ausgeführt.
CALL-Aufrufe dürfen beliebig geschachtelt werden.
Der EXEC-Befehl hat die Form:
Vc==Wert
Er ermöglicht es, Werte, also insbesondere
Variableninhalte, als Verarbeitungsbefehle ausführen zu lassen.
|
In den Abschnitten 1.10 und 1.11 wurde schon die Möglichkeit aufgezeigt, den Ausgabestrom der Verarbeitung auf den Bildschirm oder in eine andere Datei zu lenken.
Aber es gibt noch weitere Möglichkeiten. Alle diese Leistungen werden angesteuert über den schon erwähnten Verarbeitungs-Befehl zum Umstellen der Ausgabedatei:
Vc ->
Hinter dem Befehl folgt eine Zeichenfolge, die als Dateiname ausgewertet
wird. Der Befehl führt dazu, daß die bisherige Ausgabedatei abgeschlossen
wird (ausgenommen beim Vc->'*C'
) und die Ausgaben der Verarbeitung
in die hier angegebene Datei umgelenkt werden.
Neben der Angabe eines normalen Dateinamens, der auch als solcher interpretiert wird, sind folgende Bezeichnungen als Dateinamen zulässig und werden speziell behandelt:
Zielangabe
|
Wirkung
|
||||
---|---|---|---|---|---|
*C |
Die Ausgabe wird ab sofort auf den Bildschirm gelenkt (ohne daß die vorige Ausgabedatei geschlossen wird). Die Angabe eines Leerstrings als Dateiname führt dazu, daß die Ausgabe wieder in die ursprüngliche Zieldatei gelenkt wird (allerdings nur, wenn es sich zuvor um echte Dateiausgabe gehandelt hat).
|
||||
CON: | wie *C, die Ausgabe wird auf den Bildschirm umgelenkt. | ||||
LPT1: | Die Ausgabe erfolgt auf dem MSDOS-Drucker bzw. der Netzwerdruckerschnittstelle LPT1. Umleitungen der Druckausgaben für LPT1: mittels Windows-Definitionen bzw. MSDOS- Kommandos werden automatisch mit vorgenommen. | ||||
LPT2: |
analog zu LPT1: | ||||
COM1: COM2: bis COM9: |
die Ausgabe erfolgt über die angegebene COM-Schnittstelle | ||||
CLPB: | die Ausgabe wird in die Windows Zwischenablage umgelenkt | ||||
MAIL: | Die Ausgabe wird auf das Ziel email umgestellt
Der nach dieser Anweisung folgende Text wird zur Erstellung einer email benutzt. Eingebettet in den Text sind Steuerinfos. Erzeugt und abgeschickt wird die Mail in dem man die Ausgabe abschließt durch
Steuerinfos im Mailtext geben alle wichtiogen Zusatzinformationen an, insbesondere die emailadresse des Empfängers, sowie den Betreff. Alle Steuerinfos stehen in einer Zeile, die mit einer spitzen Klammer auf beginnt, dann folgt eine Steuerwort mit nachfolgendem Doppelpunkt. Dann kommt die Steuerinformation. Den Abschluss bildet eine schließende Klammer zu. Das Steuerwort für den email-Empfänger lautet
Einzelheiten sind hier beschrieben.
|
Um die Ausgabe zu beenden bzw. abzuschließen, gibt es zwei weitere Pseudo-Namen:
Zielangabe
|
Wirkung
|
---|---|
CLOSE |
das aktuelle Ausgabemedium wird abgeschlossen. Handelt es sich um Dateiausgabe, so wird die Zieldatei geschlossen. Bei Ausgabe ins Clipboard (CLPB:) wird die Zwischenablage geschlossen. Bei Druckausgabe wird für den aktuellen Drucker ein Ende-Befehl erzeugt, der zur sofortigen Bearbeitung des Druckauftrags führt. Alle nachfolgenden Ausgaben bis zum nächsten Umleitungsbefehl werden unterdrückt. |
NUL: | es werden alle Ausgabemedien geschlossen. Alle nachfolgenden Ausgaben bis zum nächsten Umleitungsbefehl werden unterdrückt. |
Darüber hinaus werden alle Ausgabemedien am Ende des Verarbeitungsprogramms geschlossen.
Durch den Befehl
Vc -< Dateiname
kann man während der Verarbeitung auf eine andere DS-Datei wechseln.