1. Sprachumfang Verarbeitung

 

1. 1. Allgemeines

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.


1. 2. Feldabruf

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.

 

1. 2. 1. Einfacher Feldabruf


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.

 
Beispiel:  

 

Das folgende zeigt eine Verarbeitungsvorschrift zum Erzeugen von Adressaufklebern

Vc A1
Vc A2
Vc A3
Vc A4
Vc A5
Vc A6
Vc A7
Vc A8

Hierbei wird Bezug genommen auf eine Adress-Datenbank, in der die Anschriftenfelder mit A1 bis A8 bezeichnet sind.

 

 

1. 2. 2. Abruf über Feldnummer

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 3

Vc 4

Vc 5

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.

 

1. 2. 3. Abruf von Mehrfachfeldern

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 )

 

 
Beispiel:   Vc Verfasser(1)
Vc Verfasser(2)
Vc Titel(1)
Vc Titel(2)
Vc Titel(3)

 

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.

 

1. 2. 4. Ausschnittsbildung

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

 

 
Beispiel:  

Feldname:

Ort
Feldinhalt: D-57489 Drolshagen

 

Befehl
Ausgabe
Vc Ort:3:5 57489
Vc Ort:1:1 D
Vc Ort:9:28 Drolshagen

 

 

 

 

Ergänzungen:

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.

 

1. 2. 5. Formatierte Ausgabe von Feldinhalten

Linksbündige Ausgabe

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


Rechtsbündige Ausgabe


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.


Beispiel:  
Feldname:
Betrag
Befehl:
Vc + Betrag ! 10

 

Inhalt
erzeugte Ausgabe
(- = geschützter Leerschritt)
1,11
------1,11
123,45
----123,45
-113,66
----113,66

 

 

 

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.

 

1. 3. Layout, Kommentare und Rumpfklammern


1. 3. 1. Layoutbefehle


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.


1. 3. 2. Kommentare


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.

 

1. 3. 3. Rumpfklammern

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

 

 

 

1. 4. Bedingte Anweisungen

Bedingte Anweisungen in ihren unterschiedlichen Formen sind dazu da, in Abhängigkeit von einzelnen Feldinhalten oder sonstigen Bedingungen unterschiedliche Ausgaben zu erzeugen.

 

1. 4. 1. Feldabfrage


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.

 

Beispiel:  

Erstellung eines Kataloges aus gespeicherten Literaturstellen

Feldnamen: Verfasser Mehrfachfeld, bestehend aus
3 Feldern

 
Felder
Verfasser Mehrfachfeld bestehend aus 3 Feldern
Titel Mehrfachfeld ebenfalls bestehend aus 3 Feldern
Jahrgang 4-stellig numerisch

 

Aufbau der Verarbeitungsdatei:
Vc (
Vc Verfasser Vc
Vc <Verfasser(2) / Vc Verfasser(2) Vc > Vc
Vc <Verfasser(3) / Vc Verfasser(3) Vc > Vc
Vc Titel(1)
Vc <Titel(2) Vc Titel(2)
Vc >Vc
Vc <Titel(3) Vc Titel(3)
Vc >Vc
Jahrgang : Vc Jahrgang
Vc)
(Jede Zeile wird durch eine Zeilenschaltung abgeschlossen)
 

 

1. 4. 2. Vergleichsabfrage

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:

 

Feldname = Wert

Feldname <>Wert

Feldname <>Wert

Feldname <>Wert

 

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.

 

Beispiel:  
Drucken von Anschriften

Im Feld A7 einer Datenbank stehe die Ortsangabe inklusive Postleitzahl. Bei ausländischen Anschriften stehe hier vorweg die postalische Landeskennung, also z.B. A- für Österreich. Bei der Ausgabe soll zusätzlich zu dieser Landeskennung in der folgenden Zeile die ausführliche Landesbezeichnung stehen.

 
Vc(
Vc A1
Vc A2
Vc A3
Vc A4
Vc A5
Vc A6
Vc A7
Vc< A7:1:1='A'
Österreich Vc
Vc >
Vc< A7:1:2='CH'
Schweiz Vc
Vc >Vc )

 

 

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:

 

'A' < 'B'
'B' < 'BB'
'AB' < 'B'
'B' < 'b'

'123' < '2'
'0' < '00'

 

Numerische Vergleiche, in denen beide Vergleichsoperanden gemäß ihres Zahlwertes miteinander verglichen werden, sind in Abschnitt 1.7 beschrieben.

 

1. 4. 3. Zusammengesetzte Bedingungen

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.

 

1. 4. 4. Die Alternative

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.

 
Beispiel:  

Vc (
...
Zahlungsbedingungen:

Sofort Vc < Skonto abzüglich Vc Skonto % Skonto
Vc / netto ohne jeden Abzug Vc >
...

Vc )

 
 

1. 5. Stringvariable und Stringwerte

1. 5. 1. Stringvariable


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.

 

1. 5. 2. Der Begriff der Variablen und des Wertes

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

Beispiele für konkrete Ausprägungen des Begriffs Variable in dem hier benutzten Sinn sind also:

 
A7

Verfasser(2)

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.

 

1. 5. 3. Konkatenation von Werten

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.

 
Beispiel:  

Vc+ A1 + ',_' + A2 + ',_'+ A3 %% 20

Wirkung: Es werden die Inhalte der Anschriftenfelder A1, A2, A3, jeweils durch ein Komma und ein Leerzeichen getrennt, hintereinander gekettet. Die maximal ersten zwanzig Zeichen dieser neu gebildeten Zeichenfolge werden dann ausgegeben.

Hinweis: Das am weitesten links stehende + ist kein Konkatenationszeichen, sondern gehört direkt zum Vc und kennzeichnet nur, dass im folgenden ein Wert ausgegeben werden soll.

Die einzelnen Befehlsbestandteile werden nacheinander von links nach rechts abgearbeitet. Dies führt dazu, daß die Formatangabe %%20, die ganz rechts steht, sich auf den links davon stehenden Gesamtausdruck (und nicht etwa nur auf den Feldinhalt von A3) bezieht.

 

 

1. 5. 4. Wertzuweisung

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


Wirkung:

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.

Beispiel:  

Rückschreibung von Kontakthistorie und Wiedervorlagedatum

Vc (
Vc : letzterKontakt = '10.01.2001'
Vc : Wiedervorlage = '10.02.2001'
Vc )
Vc (
Vc : letzterKontakt = '10.01.2001'
Vc : Wiedervorlage = '10.02.2001'
Vc )

 

 

Durch Zuweisung an Stringvariable ist es insbesondere möglich, Größen über Objektwechsel hinweg zu merken.

 
Beispiel:  

Erstellen einer nach Kurznamen sortierten Telefonliste. Jedesmal, wenn der Anfangsbuchstabe des Kurznamens wechselt, soll ein Seitenvorschub erfolgen. Der Kurzname ist in einem Feld mit dem Namen Kurzname, die Telefonnummer im Feld Telefon erfasst.

Vorgehen:

  1. Selektieren und DS-Datei erzeugen
  2. Sortieren nach Kurzname
  3. Verarbeiten mit folgender Steuerdatei

 

Vc : k$='-'
Vc (
Vc<k$<>Kurzname:1:1 Vc : k$=Kurzname:1:1

FV

-- Vc k$ --

Vc >
Vc Kurzname Vc Telefon
Vc )

 

 

 

 

1. 6. Zahlvariablen

1. 6. 1. Namen und Darstellung von Zahlvariablen

 

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)

 

1. 6. 2. Zahlzuweisung

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

 
Beispiel:  

Vc:i=0
Vc(
Vc:i=i+1
Vc)

Die Zahlvariable i wird mit 0 vorbesetzt. Bei jedem Rumpfdurchlauf wird sie um 1 erhöht, so daß der aktuelle Wert von i gerade angibt, das wievielte Objekt bearbeitet wird.

 

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.

Beispiel:  

Vc:n=1+2
Vcn

Ausgabe: 00003
Erklärung: Es wird eine Summation durchgeführt und das Ergebnis an n zugewiesen. Zu beachten ist lediglich, daß bei der Ausgabe des Inhaltes der Zahlvariablen n eine automatische Konvertierung des internen Zahlwertes in eine 5-stellige Zeichenfolge erfolgt.

 

 

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)

 

1. 6. 3. Spezielle Zahlvariablen

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.

 

ANZ

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.

 

BENNR

liefert die aktuelle Benutzernummer

 

JAHR

liefert zusammen mit den Variablen TAG und MONAT das aktuelle Tagesdatum aus.

 

MONAT

siehe JAHR

 

NR

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.

 

PLATZ

enhält die Nummer des Arbeitsplatzes, an dem die Verarbeitung läuft.

 

TAG

siehe JAHR.

 

SCH

liefert bei Schleifen den aktuellen Schleifenzähler

 

SEITE

gibt die aktuelle Seitenposition in der Ausgabedatei an. Der Wert der Variablen wird bei jedem expliziten Seitenvorschub erhöht.

 

STAT

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.

 

USER

liefert die aktuelle Ebenennummer

 

ZEILE

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.

 

1. 7. Kommerzielles Rechnen

1. 7. 1. Numerische Werte

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:
  • ( numerischer Ausdruck )
  • ( numerischer Ausdruck % Formatangabe
Ein numerischer Ausdruck kann ein einzelner Wert sein. Hierzu gehören:
 
  • numerische Konstante
  • Stringkonstante der Form 'Zeichenfolge'
  • Variablen (vom Typ Zahl oder String)
Ferner können Zusammensetzungen bebildet werden:
 
  • numerischer Ausdruck numerischer Operator Wert
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.

 
Beispiel:  
Vc :a$='123'  
Vc :b$='456'  
Vc +a$+b$ ausgedruckt wird 123456
Vc +(a$+b$) ausgedruckt wird 579
 

 

1. 7. 2. Numerische Vergleiche

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.

 
Beispiel:  

Vc<(Anzahl>100) Vc:Rabatt=5 Vc>

Ist die Anzahl grösser als 100, so wird Rabatt gewährt.

 

 

1. 7. 3. Formatierung von numerischen Werten

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.

 
Beispiel:  
Zahlwert
Formatangabe
Ausdruck
1234,50 keine 1234,5
1234,50 % . -2 1.234,50
1000000 % ' 1'000'000
1000000 % -2 1000000,00
1234,50 % 0 1235

 

 

1. 8. Schleifen

1. 8. 1. Einfache Schleifen

 

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:

 

Vc : i = Anfangswert
Vc ;

.... Schleifenrumpf

Vc < (i<Endwert) Vc: i+Schrittweite Vc .
Vc >

 
Beispiel:  

Zu Anschriften sei eine Kontakthistorie in den Mehrfachfeldern KDatum, KPartner und KErgebnis abgespeichert worden. Es existieren jeweils 20 Ausprägungen von jedem dieser Felder. Die Kontakthistorie soll ausgedruckt werden.

 

Vc (

...
Vc:i=1 Vc;
Vc KDatum(i) Vc KPartner(i) Vc KErgebnis(i)
Vc < (i<20) Vc : i+1 Vc . Vc >
...
Vc )

 

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.

 

1. 8. 2. Schachtelbare Schleifen

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.

 

1. 9. Funktionsaufrufe

 

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.

 

1. 9. 1. Funktionsaufrufe mit Ergebnissen vom Typ String


Nachfolgend sind die String-Funktionen in alphabetischer Reihenfolge beschrieben.

 

AUSWAHL ( )

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.

 

BASIC ( Basic-Befehl )

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.

 

BEN ( )

liefert das aktuelle Benutzerkürzel

 

CHR ( Zahl )

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.

 

CAPS ( Stringwert )

erwartet eine Zeichenfolge als Parameter und liefert diese zurück, wobei alle Kleinbuchstaben in Großbuchstaben gewandelt werden.

 

CARD ( Zahlwert )

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.

 

DATE ( )

Es wird das aktuelle Datum in der Form tt.mm.jj zurückgeliefert

 

DATE ( Stringwert )

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

 

Beispiel:  

Der Aufruf

Vc + DATE ('*W, den *t. *N *J')

liefert das aktuelle Tagesdatum in der Form:

Dienstag, den 30. Januar 2001

 

 

DATE ( Stringwert, Zahlwert )

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.

 
Beispiel:  

Vc : Wiedervorlage = DATE ('*T.*M.*J', DAY ( )+10)

Wenn heute der 30.Januar 2001 ist, wird als Wiedervorlage 09.02.2001. zurückgeschrieben.

 

DB ( )

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.

 

INHALT (datenbank,objektnr, feld)

Die Funktion liefert zu dem Objekt mit der Nummer objektnr aus der Datenbank db den Inhalt des Feldes feld.

 
Beispiel:  

Vc+inhalt ('A',4711,Kurzname)

liefert den Inhalt des Feldes Kurzname aus dem Objekt 4711 der Anschriften-Datenbank A.

Vc+inhalt ('NB',Verweis(i),Vorname)

liefert den Inhalt des Feldes Vorname aus dem Objekt, dessen Nummer im Feld Verweis(i) der aktuellen Datenbank steht.

 

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.

 

FIELD ( feldname )

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.

 

FILE ( )

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.

 

PLATZ$ ( )

liefert die Platznummer als Zeichenfolge.

 

TIME ( )

liefert die aktuelle Uhrzeit in der Form hh:mm:ss

 

TRIM ( Wert )

liefert den Parameter ohne führende und schleppende Leerzeichen aus.

 

TRIMH ( Wert )

wie TRIM, entfernt aber nur die hinteren Leerzeichen.

 

TRIMV ( Wert )

wie TRIM, entfernt aber nur die vorderen Leerzeichen.

 

USF ( Wert )

liefert den Parameterwert unterstrichen zurück.

 

1. 9. 2. Prozeduren ( = Funktionen ohne Ergebnis )

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.

 

BASIC ( )
BASIC

Die Prozedur BASIC integriert den DORADO Basic-Interpreter in die Verarbeitungssprache.

 

CTL ( Dateiname )

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.

 

DB ( Datenbankanwahl )

stellt die aktuelle Datenbank um.

 

FORMAT (formatname)

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.

 
Beispiel:  

Ausgabe einer Telefonliste:

 

Vc+format('db')
Vc(VcNr VcKurzanschrift VcTelefon
Vc)

 

Für diese Liste muss ein Format vom Typ 5 mit dem Namen db existieren. Hierin kann ein Kopfstein vereinbart sein, z.B. db-kopf mit dem Inhalt:

 
Telefonliste Seite Vc+(SEITE)
Adressnr. Anschrift Telefonnr.

 

 

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.

 

IMAGE (Dateiname)

Die Funktion image ermöglicht das Anzeigen von Bildern aus der Verabeitung heraus. Die Funktion hat einen Parameter, nämlich den Namen der Bilddatei.

 
Beispiel:  

Vc+image ('C:\BILDER\TESTBILD.JPG')

 

 

InitAuswahl ( zeile, spalte)
InitAuswahl ( zeile, spalte, Überschrift )

Die Prozedur InitAuswahl bereitet eine Balkenauswahl vor.

 

KBPUT ( Stringwert )

Die Prozedur KBput erwartet einen Stringwert als Parameter, der als Eingabesimulation interpretiert wird.

 

PutAuswahl ( Anzeigewert )
PutAuswahl ( Anzeigewert, Rückmeldewert)

Die Prozedur PutAuswahl meldet einen möglichen Wert für eine Balkenauswahl an.

 

ROLLR (ZeileOben, ZeileUnten)

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.

 

START (Programm, Parameter)
START (Programm, Parameter, Sprachschlüssel)

Mit Hilfe der Prozedur START kann aus einem Verarbeitungsprogramm heraus in einer freien Ebene ein beliebiges Programm als Stellvertreter gestartet werden.

 
Beispiel:  

Vc +Start('DIALOGW.EXE',t$)
Vc +CTL('CtlDatei'+Platz$()+(User))

Hierdurch wird das Dialog-Programm in einer Stellvertreterebene gestartet (der Name des Tableaus steht dabei auf t$), und nach Abschluß aller Eingaben wird die erzeugte Kontrolldatei aktiviert.

 

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

 

 

 

WINDOW ( Fensternr, oben, unten, links, rechts, Rahmen, Attribut )

Es wird ein Bildschirmfenster definiert.

 

1. 9. 3. Funktionsaufrufe mit Zahlergebnis

Nachfolgend sind die Funktionen in alphabetischer Reihenfolge beschrieben, die eine Zahl als Ergebnis zurückliefern.

DAY ( )
DAY ( tag, monat, jahr )

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).

 

DPlen ( Länge, Stringwert )

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.

 

FREI ( Feldname )

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.

 

INSTR ( Stringwert , Stringwert )
INSTR ( Stringwert , Stringwert , Anfangsposition)

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.

 

 
Beispiel:  
Aufruf
Ergebnis

instr('Müller, Franz, Köln', ',')

7
instr('Müller, Franz, Köln', ',', 7) 7
instr('Müller, Franz, Köln', ',', 8) 14
instr('Müller, Franz, Köln', ',', -1) 7
instr('Müller, Franz, Köln', ',', -2) 14

 

 

LEN ( Wert )

liefert die Länge der Zeichenfolge, d.h. die Anzahl der Zeichen, die als Parameter angegeben ist.

 

UPB ( Feldname )

erwartet als Parameter den Namen eines Mehrfachfeldes. Zurückgeliefert wird die Nummer des letzten Elementes.

 

XINIT ( dbnr, Datenbank, Feldname )
XFIRST ( dbnr, Suchbegriff )
XNEXT ( dbnr )

ermöglicht das Suchen von Objekten in anderen Datenbanken. Einzelheiten sind in Kapitel 1.13. beschrieben.

 

1. 10. Bildschirmein- und ausgabe

1. 10. 1. Bildschirmausgabe

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

Wirkung:

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

Zeilennummer , 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.

 
Beispiel:  

Der Befehl

Vc ?-%1,1% ' '

löscht den Bildschirm ab der ersten Zeile.

 

 

1. 10. 2. Bildschirmeingabe

Bei der Bildschirmeingabe werden die eingegebenen Zeichen unverändert in die Ausgabedatei übernommen. Den zugehörigen Befehl gibt es ebenfalls wieder in mehreren Varianten:

Wirkung :

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.

 

1. 10. 3. Zuweisung von Eingaben an Variablen

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.

 

1. 10. 4. Bildschirmfenster

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
8 für invers
128 für hinterlegt

 

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.

 

1. 10. 5. Balkenauswahl

Die im DORADO übliche Balkenauswahltechnik steht auch als Sprachmittel in der Verarbeitung zur Verfügung.


Die Benutzung der Balkenauswahl erfolgt in drei Schritten:

(1) Festlegung, wo das Auswahlfenster aufgebaut werden soll.

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 )

 

(2) Definition der Anzeige- und Rückmeldwerte

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.

 

(3) Auswahl

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.

 

Beispiel:  
Vc + initauswahl (10,30,'Anrede auswählen)
Vc + putauswahl (Anrede1)
Vc + putauswahl (Anrede2)
Vc + putauswahl (Anrede3)
Vc : a$ = auswahl ( )
Auswahlwert: Vc a$

Vc + initauswahl (20,40, 'Anredeform auswählen')
Vc + putauswahl ('Firmenanrede, Ansprechpartner1', Anrede1)
Vc + putauswahl ('Firmenanrede, Ansprechpartner2', Anrede2)
Vc + putauswahl ('private Anrede', Anrede3)
Vc : a$=auswahl ( )
Auswahlwert: Vc a$

 

Bei der ersten Auswahl erscheint ein 3-zeiliges Auswahlfenster, indem als Auswahlwerte die Inhalte der Felder Anrede1, Anrede2 und Anrede3 angezeigt werden. Wird bei der Auswahl der Balken beispielweise auf den Inhalt von Anrede3 positioniert und anschließend die Zeilenschaltung betätigt, so erhält a$ den Inhalt von Anrede3.

Im Unterschied dazu werden bei der zweiten Auswahl andere Texte angezeigt. Zurückgeliefert werden auch hier die Inhalte der Anredefelder. Rückmelde- und Anzeigewerte weichen voneinander ab.

 

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).

 

1. 10. 6. Sonstige Bildschirmoperationen

Umstellen auf Bildschirmausgabe

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.

 

Rollbereich umstellen

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.

 

1. 11. Dateizugriffe

1. 11. 1. Einfügen von Dateien und Dateiabschnitten

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ß.

 

 

1. 11. 2. Zuweisung von Sätzen aus Dateien

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.

 
Beispiel:   In der Datei '**plz' stehen Postleitzahlen, Ortsnamen und Telefon-Vorwahlnummern, z.B.:

 

PLZ
Ort
Vorwahl
12507 Berlin 030 /
50999 Köln 0211 /
57489 Drolshagen 02761 /
80803 München 089 /

 

Durch den Aufruf

Vc : a$ = !! '**plz' ('57489')

erhält a$ den Wert

57489 Drolshagen 02761 /

 
I

 

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.

 

Beispiel:  

Nach Werbebriefaktionen oder Ähnlichem soll das Wiedervorlagedatum in die Anschriftendatenbank (Datenbankkennung A-) zurückgetragen und in einem Textbaustein die Kontakthistorie ergänzt werden.

 
Vc (
Vc : Wiedervorlage='24.02.01'
Vc ! 'A-'+(nr) = '24.01.01'+CHR(9)+'Werbebrief'
Vc )

 

 

1. 11. 4. Ausgabedatei umstellen

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.

 

1. 11. 5. Dateien löschen

Durch den Befehl

Vc -- Dateiname

wird die angegebene Datei gelöscht.

 
Beispiel:  

Am Ende eines Verarbeitungslaufes soll die ausgewertete DS-Datei gelöscht werden, z.B. um doppelte Umsatzrückschreibungen durch nochmalige Verarbeitung o.ä. zu verhindern. Die DS-Datei sei im Abfrageprogramm über die TAB-Taste erzeugt worden.

 

Vc (

....

Vc )

Vc -- db( )+'-ds'+PLATZ$+(USER) % 16 + '0 008'

 

 

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.

 

 

1. 12. Ergänzungen zu Variablen

1. 12. 1. Das Stringfeld

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.

 

1. 12. 2. Das Integerfeld

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.

 

1. 12. 3. Reservieren von Stringvariablen

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.

 

 

1. 13. Zugriff auf andere Datenbanken

1. 13. 1. Datenbank umstellen

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.

 
Beispiel:  

Beim Erfassen eines Datenbankobjekts in einer Vertragsdatenbank werden die Vertragspartner erfaßt, indem ihre Anschriftennnummer aus der Anschriftendatenbank (Anwahl A) eingegeben wird. Die Nummer des Vertragsobjekts soll automatisch im Anschriftenobjekt vermerkt werden.

Um das Beispiel zu vereinfachen, sind nur zwei Vertragspartner vorgesehen, deren Adressnummern in den Felder VPartner1 und VPartner2 gespeichert sind.

Lösung:

In der DB-Konfiguration wird mittels *Vende eine Verarbeitungsvorschrift vereinbart, die beim Abspeichern des Vertragsobjekts ausgeführt wird.

Diese Verarbeitungsvorschrift sieht wie folgt aus:

 

Vc : v = (Vpartner1) Anschriftennummer merken
Vc : p = (Vpartner2)
Vc : n = nr Vertragsnummer merken

Vc + db ('A') Anschriften-DB einstellen

Vc < (v<>0)
Vc : nr = v Anschriftenobjekt lesen
Vc : vertragsnr =(n) Rückschreibung
Vc >

Vc < (p<>0) für den 2. Beteiligten:
Vc : nr = p Anschriftenobjekt lesen
Vc : vertragsnr =(n) Rückschreibung
Vc >

 

 

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.

 

1. 13. 2. Suchen in anderen Datenbanken

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:

XINIT ( Zugriffsnummer, db, feld )

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.

XFIRST ( Zugriffsnummer, inhalt )

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.

XNEXT ( Zugriffsnummer )

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.

 

1. 14. Basic

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.

 

Beispiel:  
Vc+BASIC('loadgo"BAS+DEMO"') ein BASIC-Programm wird geladen und gestartet
   
Vc+BASIC('procSPEZIAL("DEMO",187)')

eine Prozedur aus dem bereits geladenen und gestarteten Programm wird aufgerufen mit den zwei Parametern "DEMO" bzw. 187.

 

 

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.

 

1. 15.  Sonstige Sprachelemente

1. 15. 1. Labels und Goto

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.

 

1. 15. 2. Der CALL-Befehl

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.

 

1. 15. 3. Der EXEC-Befehl

 

Der EXEC-Befehl hat die Form:

Vc==Wert

Er ermöglicht es, Werte, also insbesondere Variableninhalte, als Verarbeitungsbefehle ausführen zu lassen.

 

Beispiel:  

Durch das Programm:
Vc:i=1
Vc;
Vc=='VcA' + (i)
Vc<(i<9)Vc:i+1Vc.Vc >

werden die Felder A1 bis A9 ausgegeben

 

 

1. 15. 4. Wechsel des Ausgabemediums

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:
LPT3:
bis
LPT9:

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

Vc->'CLOSE'

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 z.B. email für die Betreffzeile betreff.

Beispiel:  

<email:info@sebag.de>
<betreff:Software-Download>

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.

 

1. 15. 5. Wechsel der DS-Datei

 

Durch den Befehl

Vc -< Dateiname

kann man während der Verarbeitung auf eine andere DS-Datei wechseln.