Vb.77: "avanti" 1.1

Bernhard Eversberg EV at buch.biblio.etc.tu-bs.de
Di Sep 3 15:12:53 CEST 1996


Verlautbarung 77 der Entwicklungsabteilung                         960903
------------------------------------------

"avanti"-Server Version 1.1
---------------------------

Die Erweiterung des "avanti"-Servers schreitet voran. Es wird in den
naechsten Tagen die Version 1.1 bereitgestellt.
Wir geben hier nur vorab eine Uebersicht der neuen Funktionen.
An den vorhandenen hat sich nichts geaendert.
Das Papier AVANTI.TXT wird zugleich aktualisiert, sobald wir die Freigabe
bekanntgeben.
Bevor wir zu den Neuerungen kommen, zuerst eine aktuelle

Befehlsuebersicht  (alle Befehle)
-----------------

Es gibt 7 Gruppen von Befehlen:

 1    Auftrags-Steuerbefehle
 2    Suchen, Einlesen, Sortieren, Auflisten 
 3    Exportieren (Datensaetze und Texte in Download-Datei schreiben)
 4    Manipulation von Daten im Arbeitsspeicher
 5    Speicherfunktionen (Schreiben in die Datenbank)
 6    Bedingungspruefungen und Spruenge
 7    Schalter und Einstellungen

Es folgt eine alphabetische Kurzuebersicht, wobei die Gruppennummer 
links angegeben ist:

 4    copy      Kopiere den aktuellen Satz (d.h. es entsteht ein neuer)
 3    download  Exportiere den aktuellen Satz
 5    erase     Loesche den aktuellen Satz (auch aus den Registern)
 2    find      Ergebnismenge erstellen (Pica-aehnlicher Find-Befehl)
 2    get       Hole einen Satz (er wird dadurch zum "aktuellen Satz")
 2    help      Information ueber die Datenbank ausgeben (Registernamen etc.)
 6    if        Bedingungen pruefen und nachfolgende Aktion
 6    jump      Springe zu einem label
 2    list      Kurzliste der Ergebnismenge ausgeben
 4    new       Aktuellen Satz als neuen (leeren) Satz behandeln
 2    order     Sortiere die Ergebnismenge (auf- oder absteigend)
 5    put       Schreibe den aktuellen Satz in die Datenbank zurueck
                   (einschl. aller Registeraenderungen)
 2    qrix      Registerauszug ausgeben
 4    read      Naechsten Satz aus einer ASCII-Datei in den aktuellen Satz
                   einlesen
 7    set       Setze diverse interne Werte und Zustaende
 5    upload    ASCII-Datei als neue Datensaetze einlesen und speichern
 5    update    ASCII-Datei einlesen, Saetze per Primaerschluessel identi-
                   fizieren und ggfls. ersetzen (incl. Registeraenderungen)
 3    w/W       Schreibe Text und Daten in Download bzw. Errordatei
 3    xport     Lade Exportparameter / Setze Exportdatei
 4    #         Aktionen mit Datenfeldern und Anwendervariablen
 1    :         Label (Sprungmarke)
 1    @         Identifikation des Benutzers


Neu in Version 1.1
------------------

w #uxy               Ausgabe einer Anwendervariablen

Alle w-Befehle lassen sich auf einer Zeile beliebig kombinieren, z.B.

w n  "Ort: "  #74  ": "  #75  ", "  #76  ". - "  #77 n 


#nnn=<cstring>       Hinter dem '=' kann man dieselben Elemente verwenden,
                     die auch beim "write"-Befehl auftreten koennen, also
                     insbes. andere Kategorien und Anwendervariablen.
                     Achtung: das '=' muss auf der Position des ersten
                     Textzeichens sein (CFG-Befehl k), z.B.
                     #40 ="Meier, Fritz"             #402="Schmidt, Kurt"
                                  ist gleichwertig mit
                     #40 Meier, Fritz                #402Schmidt, Kurt
                     Das gilt auch fuer die #u-Variablen:
                     #ubc="TEXT"    oder   #ubcTEXT

Die Kategorie #nnn kann also auch eine #u-Variable (Anwendervariable) sein.
Diese wird dann in den Hintergrundspeicher kopiert und kann spaeter wieder
benutzt werden. Man hat also Variablen des Typs #uxy zur freien Verfuegung.
Dieselben koennen innerhalb der verwendeten Exportparameter wie gewohnt
eingesetzt werden. Will man z.B. die Kategorie #90 in #usg aufbewahren,
braucht man nur  #usg=#90 zu geben.

read <name>          Datei <name> oeffnen und ersten Satz einlesen
                     ERROR wenn es nicht gelingt
read                 naechsten Satz einlesen
                     ERROR wenn nichts mehr da
                     Eingelesen wird der Satz in das Objekt 2, wenn
                     vorher "set obj 2" gegeben wurde, sonst in Objekt 1.
                     (siehe ->  "set object ..." )
Statt mit "upload" oder "update" kann man folglich auch mit "read" und
"put" arbeiten, was man als Schleife organisieren muss. Das hat den
Vorteil, dass an jedem Satz vor dem Speichern Operationen durchfuehrbar sind.
(Siehe Beispiel 7: Saetze einzeln einlesen und speichern)
Mit "read" und "dow" kann man aber auch Grunddateien exportieren (Beisp. 8),
also "avanti" statt des konventionellen SRCH einsetzen (I-1.APR als Export-
parameter einsetzen).


if #uxy <cmd>        Dasselbe, nur auf eine Anwendervariable #uxy bezogen.
                     D.h. <cmd> ausfuehren, wenn #uxy besetzt ist.

if #mmm = #kkk <cmd>   Vergleiche Inhalt von #mmm mit #kkk
        >            Bei Gleichheit bzw. groesser/kleiner: <cmd> ausfuehren
        <            #mmm und/oder #kkk koennen Anwendervariablen sein.
                     Wenn #mmm oder #kkk nicht besetzt ist, gilt die
                     Bedingung als nicht erfuellt.
                     Statt #kkk kann auch eine Zahl stehen, dann wird ein
                     Zahlenvergleich durchgefuehrt, sonst Stringvergleich.
                     Teilfelder koennen nicht angegeben werden, dazu muss
                     man erst Anwendervariablen erzeugen, z.B.
                     #uv1 = #123$a   // $a von #123 in #uv1 kopieren
                     #uv2 = #234$b   // $b von #234 in #uv2 kopieren
                     if #uv1 = #uv2 ...
 
set object 1 / 2     Satz 1 / Satz 2  einschalten                            *1
s o 1                Es gibt zwei interne Arbeitsspeicher. Normalerweise
s o 2                ist Satz 1 eingeschaltet, d.h. alle Aktionen werden
                     in Satz 1 ausgefuehrt. Jederzeit kann man aber in
                     einem Auftrag auf Satz 2 schalten, einen Datensatz
                     mit "get" oder "read" hineinholen, damit Aktionen
                     durchfuehren und ihn auch mit "put" wieder speichern.

put 1                Satz 1 bzw. Satz 2 zurueckschreiben in die Datenbank.
put 2                Wenn man nur "put" schreibt, wird der gerade aktuelle
                     Satz geschrieben, der zuletzt mit "set o" angewaehlt
                     wurde. Wenn "set o" nicht benutzt wurde, ist es
                     immer der Satz 1.

set download 1 / 2   Download 1 oder 2 einschalten
s d 1                Es koennen 2 download-Parameter und -Dateien definiert
s d 2                sein. Normalerweise ist Download 1 aktiviert.
                     Wenn erstmals "set dow 2" gegeben wird, muss man
                     gleich danach  "x p ..." und "x f ..." setzen, damit
                     dem Programm bekannt ist, was bei "download" 
                     geschehen soll. Anschliessende "down"-Befehle laufen
                     dann mit diesem Set ab, bis wieder "set d 1" kommt.

set list i           Maximalzahl Zeilen fuer den "list"-Befehl
                     (als Default ist 10 eingestellt)

set max i            Maximalzahl Datensaetze fuer "down set"-Befehl


Beispiel 7. Saetze einzeln einlesen und speichern
-------------------------------------------------

NEWDATA ist eine Grunddatei neuen Typs (ASCII-Datei). Die Saetze sollen
eingelesen und gespeichert werden. Dabei soll jeder Satz noch vorbearbeitet
werden. Hier nur das Geruest, damit es uebersichtlich bleibt:

@3
read NEWDATA        // QuellDatei wird geoeffnet, erste Satz wird eingelesen

:schleife

 // Vorbearbeitung durch beliebige Befehle
 ....
put                 // dann Satz wegschreiben

read                // naechsten Satz einlesen
if ok jump schleife    // wenn noch einer da war, Sprung nach :schleife


Beispiel 8. Grunddatei exportieren
----------------------------------

Eine Grunddatei des neuen Typs kann man nicht mit dem alten SRCH einlesen. 
Der "avanti"-Server kann sie aber lesen und auch exportieren:
Achtung: Als Ausgabe wird immer eine Datei des Typs .DNL erzeugt.

Wenn die Datei z.B.  ROHDATEN  heisst, braucht man nur diesen Job:
(Auf die Datenbank wird hierbei gar nicht zugegriffen, es sei denn,
man hat Nachladungen oder V14-Verknuepfungen in den Daten)


xport p p-normal    // diese Exportparameter benutzen
// oder:
// x p i-1          // Grunddatei alten Typs erzeugen
xport d LISTE       // ZielDatei

read ROHDATEN       // QuellDatei wird geoeffnet, erste Satz wird eingelesen

:schleife

dow                 // Satz exportieren
     
read                // naechsten Satz einlesen
if ok jump schleife    // wenn noch einer da war, Sprung nach :schleife


--------------------------------------------------------------------------

Ferner wurden intern, was man nach aussen nicht merkt, die Voraussetzungen
fuer eine Umstellung auf das "pipe"-Konzept von UNIX bzw. das Socket-
Konzept von Windows verbessert.


MfG  B.E.





Mehr Informationen über die Mailingliste Allegro