prevnext   » Startseite » Analyse V4.20b » Funktionsweise von Analyse

Funktionsweise von Analyse

Inhaltsverzeichnis


1.   Allgemeine Funktionsweise

Eine einzelne Zeile inklusive Kommentare darf nicht länger als 10.000 Zeichen sein, mehrere Fortsetzungszeilen zusammen dürfen aber beliebig lang sein. Längere Zeilen werden abgeschnitten und der Rest der Zeile dann als weitere Zeile betrachtet.

Ein Ausrufezeichen ('!') leitet einen Kommentar bis zum Zeilenende ein. Eine Geschweifte-Klammer-Auf ('{') leitet einen Kommentar bis zum Zeilenende oder bis zur nächsten Geschweifte-Klammer-Zu ('}') ein. Kommentare werden durch ein Leerzeichen ersetzt. Durch #IF 0 und #ENDIF lassen sich auch ganze Blöcke auskommentieren. Die Steuerzeichen für Kommentare können auch mit dem Kommando #SETCOMMENT definiert werden.

Steuerzeichen (ASCII-Kode<32, z.B. TAB, ESC, CR, LF, FF, ... ) werden außerhalb von Zeichenketten durch Leerzeichen ersetzt. Mehrfache Leerzeichen werden außerhalb von Zeichenketten (siehe unten) durch ein einzelnes Leerzeichen ersetzt. Leerzeichen oder Tabulatoren am Zeilenanfang oder Zeilenende und auch ganze Leerzeilen werden ignoriert.

Ein Backslash ('\') als letztes Zeichen einer Zeile nach der Entfernung von Kommentaren leitet eine Fortsetzungszeile ein. Eine Basiszeile wird zusammen mit einer oder mehreren Fortsetzungszeilen logisch wie eine Zeile betrachtet.

Zeilen, die mit dem Nummer-Symbol ('#') beginnen (z.B. #IF oder #DEFINE) sind Steuerzeilen für den Preprozessor oder leiten programmabhängige Kommandos ein. Groß- und Kleinschreibung ist bei den Preprozessor-Befehlen unerheblich. Zeilen, die nur aus einem '#' bestehen oder mit '##' bzw. '#!' beginnen, werden vollständig ignoriert.

Nicht-Kommandozeilen werden in die Ausgabedatei kopiert. Genaure Details werden im nächsten Abschnitt beschrieben.


2.   Textzeilen

Alle Zeilen, die nicht mit einem Nummernzeichen ('#') beginnen (Leerzeichen und Tabulatoren werden vor einem '#' ignoriert), sind Textzeilen.

  DEBUG-INFO: Text unvollständig/fehlerhaft  


3.   Steuerdateien

  --- ??? ---  

 Die Steuerdatei wird im Initialisierungsmodus abgearbeitet:
	 - Es werden Einstellungen zum Einlesen der Dateien vorgenommen.
	 - Die Kommandozeilenparameter können verarbeitet.
	 - Eigene Kommandozeilen können zugefügt werden.
	 - Durch das Kommando 'SCANFILES' werden die angegebenen Eingabe-
	   dateien ausgewertet. (-> Schritt 4)

 Die Eingabedateien werden ausgewertet.

 Die Steuerdatei wird im Auswertungsmodus abgearbeitet:
	 - Definition von selections, transformations, playercalculations,
		gamecalculations, printings
	 - Eingabetabellen werden selektiert.
	 - Auswertungsmodi werden definiert.
	 - Statistische Auswertungen werden durchgeführt.
	 - Ergebnisse werden auf Dateien ausgegeben.



3.1   Kommandos der Steuerdateien

  --- ??? ---  


 DEFINE <objekt> <name>

   Es wird ein Object definiert, welches später mit dem angegebenen Namen
   referenziert werden kann. Durch die wiederholte Definition eines Objektes
   kann dieses geändert oder ergänzt werden.


 DEFINE OPTIONS

   Es können weitere Optionen definiert werden, die alle mit '-', '+' oder
   '/' eingeleitet werden können. Dabei werden fünf Arten von Optionen
   unterstützt, die verschiedene Arten von Parametern erwarten:

     VOID <options>...
	Definition von Optionen ohne Parameter.

     CHARACTER <options>...
	Definition von Optionen, die genau ein Zeichen als Parameter erwarten.

     TEXT <options>...
	Definition von Optionen, die eine beliebig langen Text als
	Parameter erwarten.

     INTEGER <options>...
	Definition von Optionen, die eine Ganzzahl als Parameter erwarten.

     FLOATINGPOINT <options>...
	Definition von Optionen, die eine Fließkommazahl als Parameter
	erwarten.

   Als Optionen dürfen Groß- und Kleinbuchstaben sowie Ziffern verwendet
   werden. Für jede Option, vordefiniert oder durch DEFINE OPTIONS definiert,
   werden zwei Symbole definiert: OPT$* und PARM$*. Anstatt '*' wird der
   Buchstabe oder die Ziffer verwendet, wobei bei Großbuchstaben der Buchstabe
   doppelt verwendet wird. Näheres ist im Abschnitt `Symboldefinitionen'
   beschrieben.


 DEFINE SCANMODE <name> [ <dateinamen>... ]

   Es wird ein Modus zum Lesen einer Datei mit den Spieldaten festgelegt.
   Hinter dem Namen kann eine Liste mit Dateinamen und Dateimasken mit
   haltern angegeben werden, auf die dieser Eingabemodus angewendet wird.
   Näheres ist im Abschnitt `Dateiformate für Datendateien' beschrieben.

   Die Definition von Eingabemodi wird durch END beendet, wobei die folgenden
   Kommandos möglich sind:

     MODE 18XX
     MODE RANGLIST
	Die Eingabedateien können grundsätzlich im 18XX-Format oder im
	RANGLIST-Format vorliegen. Dieses wird im Abschnitt `Dateiformate
	für Datendateien' näher beschrieben.

     PREOFF
	Mit diesem Befehl wird die Preprozessorbearbeitung (#if,#include,
	Kommentare,...) für diesen ScanMode abgeschaltet.

     PRECHAR <char>
	Es wird ein Zeichen für die Einleitung von Preprozessorbefehlen
	(#if,#include,...) festgelegt. (Standard='#')

     PRECOMMENT <string1> <string2> <string3>
	Es werden die Zeichen für Erkennung von Kommentaren durch den Prepro-
	zessor festgelegt. Dabei werden maximal die ersten beiden Zeichen
	eines jeden Strings verwendet. String-1 gibt das Zeichen oder die
	Zeichenkombination für den Beginn eines Kommentares an, String-2 für
	das Ende eines Kommentares und String-3 für einen Kommentares bis zum
	Zeilenende. Als Standard wird '{', '}' und '!' verwendet.

     PRETIE <string>
	Hiermit wird das Zeichen oder die Zeichenkombination aus zwei Zeichen
	festgelegt, mit welchen mehrere Zeilen zu einer logischen Zeile
	zusammengefaßt werden können. Dazu muß es nach dem Entfernen von
	Kommentaren als letztes in einer Zeile stehen. Als Standard wird
	'\' verwendet.

     READPOINTS <formel>
	Es wird eine Formel zur Auswahl der zu verwendenen Punktezahl
	festgelegt. Ohne Angabe wird 'P.1' als Formel verwendet.
	(siehe auch Abschnitte `Dateiformate für Datendateien' und `Formeln')

     TRANSFORMATION <formel>
	Es wird eine Formel zur Eingangstransformation der Spielpunkte
	festgelegt. Ohne Angabe wird 'P' als Formel verwendet.
	(siehe auch Abschnitte `Dateiformate für Datendateien' und `Formeln')

     SIGN <Zeichen>
	Mit dem Zeichen wird ein Scanmodus erkannt. Dazu wird aus der
	Quelldatei das erste Zeichen verglichen, das kein Kommentar und kein
	Leerzeichen ist.

     END
	Die Definition von SCANMODE wird beendet.


 DEFINE SELECTION <name>

   Es wird eine Formel für die Auswahl von Ergebnistabellen festgelegt.
   Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung'
   und die Details dieser Formel im Abschnitt `Formeln' beschrieben.

     SELECT <formel>
	Es wird eine Formel zur Auswahl der Ergebnistabellen festgelegt.
	Ohne Angabe wird '1.0' als Formel verwendet.

     END
	Die Definition von SELECTION wird beendet.


 DEFINE TRANSFORMATION <name>

   Es wird eine Formel zur Transformation der Spielerpunkte festgelegt.
   Mehrere solcher Transformationen können vor der eigentlichen Ausweertung
   durchgeführt werden.
   Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung'
   und die Details dieser Formel im Abschnitt `Formeln' beschrieben.

     VARIABLE <variablendefinition>
	Es können belibieg viele Variablendefinitionen eingefügt werden,
	die alle unmittelbar vor der Berechnung der Formel ausgeführt werden.
	Details hierzu sind im Abschnitt `Variablen' beschrieben.

     TRANSFORM <formel>
	Definition der Formel; ohne Angabe wird 'P/MEAN' verwendet.

     END
	Die Definition von TRANSFORMATION wird beendet.


 DEFINE PLAYERLEVEL <name>

   Es wird eine Formel zur Berechnung der Spielerstärke festgelegt.
   Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung'
   und die Details dieser Formel im Abschnitt `Formeln' beschrieben.

     CALCULATE <formel>
	Definition der Formel; ohne Angabe wird 'SUM/WSUM' verwendet.

     END
	Die Definition von PLAYERLEVEL wird beendet.


 DEFINE GAMELEVEL <name>

   Es wird eine Formel zur Berechnung der subjektiven Partienstärke festge-
   legt. Die Verwendung der Formel ist im Abschnitt `Schritte der Berechnung'
   und die Details dieser Formel im Abschnitt `Formeln' beschrieben.

     CALCULATE <formel>
	Definition der Formel;
	ohne Angabe wird 'WEIGHT * P * (SUMLEVEL-LEVEL) / (N-1)' verwendet.

     END
	Die Definition von GAMELEVEL wird beendet.


 DEFINE ITERATION <name>

   Hiermit werden die Parameter für das itterarive Verfahren festgelegt.
   Bei Ablauf der Iteraton kann diese durch das Drücken des Leerzeichens
   jederzeit vorzeitig beendet werden.

     MINIMUM <numerischer_Ausdruck>
	Minimale Anzahl von Iterationsschritten, die auf jedenfall
	durchgeführt werden müssen. Bereich: 1 .. 1000000

     MAXIMUM <numerischer_Ausdruck>
	Maximale Anzahl von Iterationsschritten, nach dem die Iteration
	beendet wird. Bereich: MINIMUM .. 1000000

     EPSILON <numerischer_Ausdruck>
	Bei jedem Iterationsschritt wird das Quadrat der maximalen Änderung
	eines Stärkewertes berechnet. Ist dieser Wert kleiner als EPSILON,
	dann wird die Iteration vorzeitig beendet. Wegen der Genauigkeit
	der Fließkommazahlen sind nur Zahlen aus dem Bereich 1 bis 1e-30
	sinnvoll. Der Wert '0' schaltet diese Funktionalität ab.

     END
	Die Definition von ITERATION wird beendet.


 DEFINE SORTMODE <name>

   Es wird eine Formel für die Berechnung der Reihenfolge der Spieler bei der
   Ausgabe festgelgt. Die Verwendung der Formel ist im Abschnitt `Schritte
   der Berechnung'und die Details dieser Formel im Abschnitt `Formeln'
   beschrieben.

     SORT <formel>
	Definition der Formel; ohne Angabe wird 'LEVEL' verwendet.

     REVERS
     REVERS <Boolscher_Ausdruck>
	Die Sortierung erfolgt normalerweise von großen nach kleinen Werten.
	Nach Angabe von Revers ohne Paramter oder mit einem Wert >0 erfolgt
	die Sortierung von kleinen nach großen Werten, was z.B. für die
	alphabetische Sortierrrung der Spieler nötig ist.

     END
	Die Definition von SORTMODE wird beendet.


 DEFINE PRINTGAME <name>
 DEFINE PRINTPLAYER <name>

   Es werden Formeln für die Ausgabe von Partienlisten (PRINTGAME) und
   Spielerlisten (PRINTPLAYER) festgelegt. Die Formeln liefern als Ergebnis
   eine zeichenkette, die dann in die Ausgabedatei geschrieben wird.
   Die Verwendung der Formeln ist im Abschnitt `Schritte der Berechnung'
   und die Details dieser Formeln im Abschnitt `Formeln' beschrieben.

     FILENAME <dateiname>
	Es wird ein Datei festgelegt, in die die Ausgabe geschrieben werden
	soll. Dieser Befehl impliziert den Befehl OVERWRITE.
	Ohne Angabe einer Zieldatei wird die Ausgabe in die durch das
	Kommando PRINTFILE spezifizierte Datei geschrieben.

     OVERWRITE
     APPEND
	Die beiden Varianten unterscheiden sich nur, wenn die Zieldatei, die
	durch FILENAME spezifiziert worden ist, bereits existiert. Durch
	OVERWRITE wird diese Datei überschrieben, durch APPEND wird das
	Ergebnis am Dateiende angahängt. Bei mehrfacher Verwendung dieser
	beiden Kommandos ist nur die letzte gültig. Bei der zweiten Verwendung
	des gleichen Printmodusses wird automatisch APPEND verwendet.

     SORT
     UNSORT
	Die Sortierung der Ausgabeliste wird ein- bzw. ausgeschaltet. Bei
	mehrfacher Verwendung dieser beiden Kommandos ist nur die letzte
	gültig. Voreingestellt ist SORT.

     HEADER <formel>
	Definition der Formel für den Tabellenkopf;
	ohne Angabe wird '' verwendet.

     PLAYER <formel>
	Definition der Formel, die für jeden Spieler angewendet wird;
	ohne Angabe wird 'print('%4d. %-25s %8.3f',I,NAME,LEVEL)' verwendet.

     TRAILOR <formel>
	Definition der Formel für den Tabellenfuß;
	ohne Angabe wird '' verwendet.

     END
	Die Definition von PRINTGAME bzw. PRINTPLAYER wird beendet.


 DEFINE JOB <name>

   Es wird ein MACRO definiert: Der Text zwischen 'DEFINE JOB <name>' und
   'ENDJOB' bzw. 'JOBEND' innerhalb einer Datei wird markiert. Durch einen
   Aufruf von 'JOB <name>' wird der Text wie eine Include-Datei in die
   in die gerade bearbeitete Steuerdatei eingefügt. Bei der Definition eines
   Jobs werden alle Preprozessor-Anweisungen ignoriert -- sie werden aber
   bei der Ausführung beachtet.

   Jobs können auch über die Preprozessoranweisung '#MACRO' definiert werden.


 JOB [?] <name>
 JOB [?] <name> ()
 JOB [?] <name> (P1)
 JOB [?] <name> (P1,P2,...)
   Ein zuvor mittels 'DEFINE JOB <name>' definierter Job wird ausgeführt.
   Einem Job können auch Parameter übergeben werden. Der x-te Parameter
   wird in die Variable '$x' übertragen. Die Variable ist auf jeden Fall
   definiert und '$N' enthält die Anzahl der Parameter. Die Parameter
   '$x' mit x aus $N..20 werden auf den Wert NONE gesetzt.

   Jobs bzw. Macros können auch  über die Preprozessoranweisung '#CALL'
   bzw. '#:' aufgerufen werden.


 PSET <Symbole...>
 PSET <Symbol> = <numerischer_Ausdruck> [; ...]

   ..... ??? .....
   PSET und #PDEFINE sind identisch.


 SET <Symbole...>
 SET <Symbol> = <numerischer_Ausdruck> [; ...]

   Es können Symbole definiert werden.  Symbole sind Zeichenketten, die
   aus Buchstaben, Ziffern und den Sonderzeichen '$', '_', '-' und '+'
   bestehen, wobei Großschreibung keine Rolle spielt.

   Die einzelnen Symbole können durch Kommata oder Semikola getrennt sein.
   Die Symbole erhalten den Wert '0'. Um ihnen andere Werte zuzuweisen, kann
   nach einem '=', ':' oder ':=' ein numerischer Ausdruck folgen. Die
   Definition und die Zuweisung eines Wertes erfolgt erst nach der Berechnung
   des folgenden Ausdruckes. Sollen nach einem solchen Ausdruck weitere
   Definitionen folgen, so ist das ';' als Trennzeichen zwingend. Bereits
   definierte Symbole erhalten einen neuen Wert.

   SET und #DEFINE sind identisch.


 GSET <Symbole...>
 GSET <Symbol> = <numerischer_Ausdruck> [; ...]
   GSET arbeitet wie SET, es werden jedoch globale Variablen gesetzt.
   GSET und #GDEFINE sind identisch. (Vergleiche #DEFINE ind #GDEFINE)


 COMMANDLINE
   Die Parameterzeile bei Aufruf des Programmes wird ausgewertet.
   Dieser Befehl ist nur im Initialisierungsmodus möglich.


 PARAMETER <text>
   Der folgende Text wird wie eine Parameterzeile bei Aufruf des Programmes
   behandelt und entsprechend ausgewertet. Damit können weitere Optionen und
   weitere Dateinamen von Quelldateien spezifiziert werden.
   Dieser Befehl ist nur im Initialisierungsmodus möglich.


 SCANFILES
   Der Initialisierungsmodus wird beendet, alle Quelldateien werden nach
   Ergebnistabellen durchsucht. Anschließend wird der Bearbeitungsmodus
   aktiviert. Dieser Befehl ist daher nur im Initialisierungsmodus möglich.


 OUTPUT [+] <Zieldatei>
   Es wird eine Datei für die allgemeine Ausgabe definiert. Durch die
   Verwendung von '+' vor dem Dateinamen wird eine bereits existierende Datei
   nicht überschrieben, sondern am Dateiende ergänzt. Genaueres über die
   Ausgabedateien ist im Abschnitt `Ausgabedateien' beschrieben.


 ERRORLOG [+] <Dateiname>
   Es wird eine Datei für Fehlermeldungen und Logging definiert. Durch die
   Verwendung von '+' vor dem Dateinamen wird eine bereits existierende Datei
   nicht überschrieben, sondern am Dateiende ergänzt. Genaueres über die
   Ausgabedateien ist im Abschnitt `Ausgabedateien' beschrieben.


 PRINTFILE [/] [+] <Dateiname>
   Es wird eine Datei für die Ausgabe gemäß PRINTGAME und PRINTPLAYER
   definiert. Durch die Verwendung von '+' vor dem Dateinamen wird eine
   bereits existierende Datei nicht überschrieben, sondern am Dateiende
   ergänzt. Normmalerweise wird als erstes der Programmtitel in die Datei
   geschrieben. Durch die Verwendung von '/' wird der Programmtitel nicht
   geschrieben. Genaueres über die Ausgabedateien ist im Abschnitt
   `Ausgabedateien' beschrieben.


 ECHO <String_Ausdruck>
   Das Ergebnis des Stringausdruckes wird in die gerade aktuelle Druckdatei
   (siehe PRINTFILE) geschrieben. Ist keine solche definiert, dann wird das
   Ergebnis in die Standardausgabedatei (siehe OUTPUT) geschrieben.


 MESSAGE <String_Ausdruck>
   Dieses Nachricht erscheint auf dem Bildschirm und in der Datei für
   Fehlermeldungen (siehe ERRORLOG).


 TIMESTAMP
   Sowohl im Ausgabekanal (->OUTPUT) als auch auf dem Fehlerkanal (->ERRORLOG)
   wird das aktuelle Datum mit der aktuellen Uhrzeit abgelegt.


 LOGGING
   Es wird festgelegt, welche Kontrollausgaben vorgenommen werden sollen.
   Dieses kann einzeln oder auch in Ebenen erfolgen. In die Fehlerdatei
   (-->ERRORLOG) werden immer alle Ausgaben gemäß Modus ALL geschrieben, auf
   den Bildschirm nur die spezifizierten. Über die Kommandozeilenoption -l#
   kann eine Log-Level eingestellt werden. Es existieren die folgenden
   Einstellungen:

     NONE   := LEVEL0
     LEVEL0 := %
     LEVEL1 :=          ERRORS
     LEVEL2 := LEVEL1 + INFORMATIONS
     LEVEL3 := LEVEL2 + TITLE + SUMMARY
     LEVEL4 := LEVEL3 + INPUTS + OUTPUTS
     LEVEL5 := LEVEL4 + PRINTINGS
     LEVEL6 := LEVEL5 + CALCULATIONS
     LEVEL7 := LEVEL6 + ITERATIONS
     LEVEL8 := LEVEL7 + DEFINITIONS
     LEVEL9 := LEVEL8 + GAMES
     ALL    := LEVEL9

   Die Einstellungen ermöglichen die folgenden Ausgaben:

    ERRORS	  Ausgabe von Fehlermeldungen
    INFORMATIONS  Ausgabe von Informationen über den Befehl MESSAGE
    TITLE	  Ausgabe des Programmtitels
    SUMMARY	  Ausgabe von Speicherbedarf und anderen statistischen Angaben
    INPUTS	  Ausgabe von Informationen über einzulesende Dateien
    OUTPUTS	  Ausgabe von Informationen über Ausgabedateien
    PRINTINGS	  Ausgabe von Informationen über die Tabellenausgabe
    CALCULATIONS  Ausgabe von Informationen über die Berechnungen
    ITERATIONS    Ausgabe von Infos über das Fortschreiten der Iteration
    DEFINITIONS   Ausgabe über Definitionen von Objekten
    GAMES	  Ausgabe beim Enlesen einer jeden Partie


 ROUNDING [ NEAREST | ZERO | UP | DOWN ]
   Bei der Wandlung von Fließkommazahlen in Ganzzahlen müssen diese gerundet
   werden. Es stehen nun vier Rundungsmöglichkeiten zur Verfügung:

     NEAREST Es wird immer zur nächsten ganzen Zahl gerundet (Voreinstellung)
     ZERO    Es wird immer in Richtung Wert 0 gerundet.
     UP      Es wird immer aufgerundet.
     DOWN    Es wird immer abgerundet.


 LIST <Objekt-Typ>...
   Es werden alle Objekte des angegebenen Objekttypes in die Ausgabedatei
   als Liste geschrieben. Damit sind Kontrollen möglich:

     ALL		Es wird alles ausgegeben.
     JOBS		Liste der Jobs
     LOCALS		Liste der lokalen Variablen
     GLOBALS		Liste der globlen Variablen
     SCANMODES		Liste der Objekte vom Typ SCANMODE
     FILEMASKS		Liste der Dateimasken (-->SCANMODE)
     PLAYER, PLAYERS	Liste aller Spieler
     ATTRIBUTES		Liste der Attribute
     SELECTIONS		Liste der Objekte vom Typ SELECTION
     TRANSFORMATIONS	Liste der Objekte vom Typ TRANSFORMATION
     PLAYERLEVELS	Liste der Objekte vom Typ PLAYERLEVEL
     GAMELEVELS		Liste der Objekte vom Typ GAMELEVEL
     ITERATIONS		Liste der Objekte vom Typ ITERATION
     PRINTGAMES		Liste der Objekte vom Typ PRINTGAMES
     PRINTPLAYERS	Liste der Objekte vom Typ PRINTPLAYER
     SORTMODES		Liste der Objekte vom Typ SORTMODES
     GAME, GAMES	Liste aller Partien


 SELECT <name>
   Auswahl von Partien vornehmen.
   PLAYERLEVEL, GAMELEVEL und ITERATION werden auf 'DEFAULT' gesetzt.


 RESELECT
   Vorherige SELECT wiederholen.


 TRANSFORMATION <name>
   Transformation <name> vornehemen. Es können 0 bis beliebig viele
   Transformationen hintereinander verwendet werden.


 PLAYERLEVEL <name>
 PLAYERLEVEL <name> <name2>
   Berechnungsmodus für die Spielerstärke bestimmen. Bei der Angabe von zwei
   Modi wird der zweite Modus zur Berechnung der Spielerstärken nach der
   letzten Iteration verwendet.


 GAMELEVEL <name>
   Berechnungsmodus für die subjektive Spielerstärke der Gegner innerhalb
   einer Partie bestimmen.


 ITERATE <name>
 ITERATION <name>
   Iterationsmodus bestimmen.


 CALCULATE
   Berechnungen gemäß PLAYERLEVEL, GAMELEVEL und ITERATION durchführen.


 PRINTGAMES <name>
   Liste aller ausgewählten Partien gemäß Modus <name> ausgeben.


 PRINT <name>
 PRINTPLAYERS <name>
   Rangliste aller ausgewählten Partien gemäß Modus <name> ausgeben.


 SORT <name>
   Sortiermodus für Spielerrangliste auswählen.


 CLEARVARS
   Alle spielerabhängigen Variablen löschen. (-->SAVEPLAYERS)


 SAVEPLAYERS <name>    ( vormals TRANSFER <name> )
   Für jeden Spieler werden die Variablen <name>.N, <name>.SUM, <name>.WSUM,
   <name>.BEST, <name>.WBEST, <name>.WORST und <name>.WWORST gespeichert.
   Diese Werte entsprechen den Werten bei der Berechnung von PLAYERLEVEL. Es
   können so aus mehreren Auswertungen Ergebnisse festgehalten werden. Diese
   Variablen können dann bei der Tabellenausgabe gemeinsam verwendet werden.


 SAVEGAMES <name>
   Für jede Partie werden die Variablen <name>.FIRST, <name>.MEAN,
   <name>.MEDIAN, <name>.BINOM, <name>.WEIGHT, <name>.GAMELEVEL und
   <name>.GROUP gespeichert.  Diese Werte entsprechen den Werten bei der
   Berechnung von GAMELEVEL. Es können so aus mehreren Auswertungen Ergebnisse
   festgehalten werden. Diese Variablen können dann bei der Tabellenausgabe
   gemeinsam verwendet werden.


 TABSIZE <nummerischer_Ausdruck>
   Bei der Textausgabe werden Tabulatoren für große Leerräume verwendet.
   Der Tabulatorabstand wird durch TABSIZE bestimmt. Ein Wert von '0'
   bedeutet, daß keine Tabulatoren verwendet werden sollen.


 DATE, REFDATE
   Es wird ein Referenzdatum eingestellt. (-->SELECTIION,TRANSFORMATION)
   Voreingestellt ist das aktuelle Datum (Heute, 0 Uhr).


 SYSTEM <programm + parameter>
   Es wird ein externes Programm mit Parametern aufgerufen, als ob es im
   Befehlsinterpreter -- normalerweise COMMAND.COM -- direkt eingegeben würde.
   Es wird ein Zeichenketten Ausdruck erwartet.


4.   Auswertungen

  --- ??? ---  


4.1   Schritte der Berechnung

Um einen Überblick über die Funktionalität zu erhalten, werden hier Berechnungsschritte kurz erläutert:

  1. Beim Einlesen der Dateien erfolgt eine Auswahl des Eingabewertes und eine Basistransformation der Eingabewerte. Die sich ergebenen Werte werden als Basis für alle weiteren Berechnungen verwendet.

  2. Mittels 'SELECTION' werden Eingabetabellen ausgewählt und mit einem Gewicht (WEIGHT>0) bewertet. Durch SELECT werden ITERATION, PLAYERCALC und GAMECALC auf DEFAULT gesetzt. Die Punkte der Spieler sind die Basiswerte.

  3. Mittels TRANFORMATION wird eine Transformation der der Punkte der Spieler durchgeführt, um verschiedene Spiele miteinander vergleichen zu können. Es können 0 bis beliebig viele Transformationen hintereinander verwendet werden.

  4. Durch ITERATION, PLAYERCALC und GAMECALC können Einstellungen und Formeln für die Berechnungen vorgenommen werden. Voreingestellt ist jeweils DEFAULT, gültig ist die jeweils letzte Einstellung.

  5. Durch CALCULATE erfolgt die Berechnung.
    1. Die GAMELEVEL und PLAYERLEVEL werden auf 1.0 gesetzt.
    2. Mittels GAMECALC wird der persönliche GAMELEVEL eines jeden Spielers bestimmt aus: f(P,WEIGHT,LEVEL,SUMLEVEL,GAMELEVEL,N)
    3. Für jeden Spieler werden die folgenden Werte berechnet:
      • N: Anzahl der Spiele mit dem Spieler
      • SUM: Punktesumme mit Gewichtung
      • WSUM: Summe der Gewichtungen
      • BEST: Punkte des besten Ergebnisses
      • WBEST. Gewicht des besten Ergebnisses
      • WORST: Punkte des schlechtesten Ergebnisses
      • WWORST: Gewicht des schlechtesten Ergebnisses
      Mittels PLAYERCALC erfolgt die Berechnung von PLAYERLEVEL.
    4. GAMELEVEL wird berechnet. Summe aller GAMELEVEL := Anzahl der Spiele
    5. Falls MAX-Iteration oder die maximale Veränderung >= Epsilon: Wiederhlung ab Schritt 2

  6. Jeder Spieler besitzt eine eigene Symbolliste mit folgenden Variablen:

  7. Durch 'PRINTPLAYER' bzw. 'PRINTGAME' werden die Ergebnisse ausgegeben.


4.2   Iteratives Verfahren

  --- ??? ---  


4.3   Variablen

  --- ??? ---  

 Syntax:  VARIABLE <name>       := <formel>
	  VARIABLE <name> []    := <formel>
	  VARIABLE <name> [a]   := <formel>
	  VARIABLE <name> [a:]  := <formel>
	  VARIABLE <name> [:b]  := <formel>
	  VARIABLE <name> [a:b] := <formel>

 Bei einigen Formeln können vorher Variablen definiert werden. Dazu wird ein
 Variablenname gefolgt von einer Formel angegeben. Zwischen Name und Formel
 kann ':=', ':', '=' oder nichts hiervon stehen.

 So definierte Variablen stehen zusätzlich zu den vordefinierten Variablen
 zur Verfügung. Diese können bei weiteren Variablendefinitionen oder bei
 der eigentlichen Formel verwendet werden.

 Die Daten in den eckigen Klammern geben die Art und Weise der Berechnung an.
 Dabei sind grundsätzlich alle Parameter verfügbar, die auch bei der
 eigentlichen Formel verfügbar sind.

   -    Die Berechnung erfolgt spielerunabhängig. Alle spielerabhängigen
	Variablen sind daher undefiniert.

  []    Die Berechnung erfolgt hintereinander für alle Teilnehmer.

  [a]   Die Berechnung erfolgt nur für Teilnehmer `a'.

  [a:]  Die Berechnung erfolgt hintereinander für alle Teilnehmer ab
	einschließlich Teilnehmer `a'. Anstatt '[a:]' kann auch '[a:*]' oder
	'[a:y]' mit hinreichend großem 'y' geschrieben werden.

  [:b]  Die Berechnung erfolgt hintereinander für alle Teilnehmer bis
	einschließlich Teilnehmer `b'. Anstatt '[:b]' kann auch '[x:b]'
	mit x<=1 geschrieben werden.

  [a:b] Die Berechnung erfolgt hintereinander für alle Teilnehmer von
	einschließlich Teilnehmer `a' bis einschließlich Teilnehmer `b'.

 Für 'a' und 'b' können beliebige numerische Ausdrücke verwendet werden.
 Die Indizes werden automatisch auf die Grenzwerte angepaßt.


				Beispiel

 Es soll eine Transformation definiert werden, die das geometrische Mittel
 als Referenzwert verwendet. Ein mögliche Lösung ist folgendes, wobei anstatt
 Multiplizieren und Wurzelziehen das arithmetische Mittel aus den Logarithmen
 berechnet wird:

    define transformation gmean
       variable gmean   := 0.0                ! 1. Formel
       variable gmean[] := gmean + log(p)     ! 2. Formel
       variable gmean   := exp(gmean/n)       ! 3. Formel
       transform p / gmean                    ! 4. Formel
    end

 Es wurden vier Formeln definiert:

  1. Die Variable GMEAN wird definiert und der Wert 0.0 zugeordnet.
  2. Über alle Spieler wird die Summe des Logarithmusses ihrer Punktewertung
     gebildet.
  3. In einer Abschlußberechnung wird das geometrische Mittel berechnet.
  4. In der eigentlichen Transformation wird das geometrische Mittel als
     Referenzwert verwendet.


4.4   Formeln

  --- ??? ---  

 Im folgenden werden die im Programm ANALYSE verwendet Formeln beschrieben.
 Die genaue Syntax der Formeln ist in der Datei 'STREAM.HTM' beschrieben.

			===============================

 READPOINTS  (-->define scanmode)

    Standardformel:  'P.1'
    Variablen:  N        Anzahl der Punkteangaben
		P.1      erste Punkteangabe
		 :         :
		P.n      letzte Punkteangabe
		PN       Kürzel für 'P.n'

    Sobald eine Datenzeile (Information eines Spielers) eingelesen worden ist,
    wird diese Formel angewendet. Damit kann aus mehrspaltigen Tabellen der
    richtige Punktewert, ggf. transformiert, ausgewählt werden.

			===============================

 TRANSFORMATION  (-->define scanmode)

    Standardformel:  'P'
    Variablen:
	DATE      Datum der Tabelle als Zahl im Format `yyyymmdd'
	YEAR      Jahreszahl des Datums der Tabelle
	MONTH     Monatszahl des Datums der Tabelle
	DAY       Tageszahl des Datums der Tabelle
	AGE       Alter der Tabelle in Tagen relativ zum Referenzdatum
	REFDATE   Referenzdatum als Zahl im Format `yyyymmdd'
	REFYEAR   Jahreszahl des Referenzdatums
	REFMONTH  Monatszahl des Referenzdatums
	REFDAY    Tageszahl des Referenzdatums
	FACTOR    Gewichtungsfaktor, der bei der Partie angegeben wurde ('*nnn')
	FIRST     Punkte des besten Spielers
	MEAN      arithmetisches Mittel der Spielerpunkte
	MEDIAN    Median der Spielerpunkte
	MIDDLE    spezieller gewichteter  Mittelpunkt der Spielerpunkte
	BINOMIAL  Mittelwert mit Binomialgewichtung der Spielerpunkte
	TITLE     Titelzeile des Spieles
	TEXT      Textueller Kommentar innerhalb der Titelzeile
	N         Anzahl der Spieler innerhalb einer Partie
	I         Index des aktuellen Spielers, 1..N
	R         Rang des aktuellen Spielers
		  Spieler mit der gleichen Punktezahl erhalten den
		  gleichen niedrigen Rang, z.B. 1,2,2,2,5,6,6,8
	RN        Anzahl der Spieler, die den gleichen Rang 'R' haben
	P         Punkte des aktuellen Spielers
	P.1       Punkte des Spielers mit der größten Punktezahl
	 :          :
	P.n       Punkte des Spielers mit der geringsten Punktezahl
	PN        Kürzel für 'P.n'
	A$*       Für jedes Attribut <attrib> ist ein Symbol
		  'A$<attrib>' definiert.
	SM$*      Für den ScanMode, mit dem diese Tabelle eingelesen
		  worden ist, ist das Symbol 'SM$<name>' definiert.

    Nach dem Einlesen aller Spieldateien werden die Spielpunkte der Spieler
    aller Eingabetabellen transformiert. Die Formel wird dabei nacheinander
    für alle Spieler einer Partie angewendet. Anschließend werden die Spieler
    neu sortiert. Die neu errechnete Punktezahl ersetzt den Wert 'P' und wird
    für alle weiteren Berechnungen verwendet. Die Ursprungswerte sind hiernach
    nicht mehr verfügbar.

    Nach der Transformation sollten die folgenden Eigenschaften erfüllt sein:
	- Die Punktzahl eines jeden Spielers ist >0.0
	- Der beste Spieler hat die meisten Punkte
    Diese Formel wird normalerweise nur dann verwendet, wenn die Daten nicht
    die beiden oben genannten Eigenschaften besitzen.

			===============================

 SELECT  (-->define selection)

    Standardformel:  '1'
    Variablen:
	DATE      Datum der Tabelle als Zahl im Format `yyyymmdd'
	YEAR      Jahreszahl des Datums der Tabelle
	MONTH     Monatszahl des Datums der Tabelle
	DAY       Tageszahl des Datums der Tabelle
	AGE       Alter der Tabelle in Tagen relativ zum Referenzdatum
	REFDATE   Referenzdatum als Zahl im Format `yyyymmdd'
	REFYEAR   Jahreszahl des Referenzdatums
	REFMONTH  Monatszahl des Referenzdatums
	REFDAY    Tageszahl des Referenzdatums
	FACTOR    Gewichtungsfaktor, der bei der Partie angegeben wurde ('*nnn')
	FIRST     Punkte des besten Spielers
	MEAN      arithmetisches Mittel der Spielerpunkte
	MEDIAN    Median der Spielerpunkte
	MIDDLE    spezieller gewichteter  Mittelpunkt der Spielerpunkte
	BINOMIAL  Mittelwert mit Binomialgewichtung der Spielerpunkte
	TITLE     Titelzeile des Spieles
	TEXT      Textueller Kommentar innerhalb der Titelzeile
	N         Anzahl der Spieler innerhalb einer Partie
	P.1       Punkte des Spielers mit der größten Punktezahl
	 :         :
	P.n       Punkte des Spielers mit der geringsten Punktezahl
	PN        Kürzel für 'P.n'
	A$*       Für jedes Attribut <attrib> ist ein Symbol
		  'A$<attrib>' definiert.
	SM$*      Für den ScanMode, mit dem diese Tabelle eingelesen
		  worden ist, ist das Symbol 'SM$<name>' definiert.

    Mit dieser Formel werden Tabellen für eine Auswertung ausgewählt. Ist der
    Rückgabewert >0.0, dann wird die Tabelle mit dem Rückgabewert als
    Gewichtung (-->WEIGHT) für die folgenden Auswertungen verwendet.
    Andernfalls wird die Tabelle nicht verwendet.

			===============================

 TRANSFORM  (-->define transformation)

    Variablendefinition mittels `VARIABLE' möglich (siehe vorheriges Kapitel)
    Standardformel:  'P/MEAN'
    Variablen:
	WEIGHT    Gewichtung der Partie := Ergebnis von SELECT
	FIRST     Punkte des besten Spielers
	MEAN      arithmetisches Mittel der Spielerpunkte
	MEDIAN    Median der Spielerpunkte
	MIDDLE    spezieller gewichteter  Mittelpunkt der Spielerpunkte
	BINOMIAL  Mittelwert mit Binomialgewichtung der Spielerpunkte
	N         Anzahl der Spieler innerhalb einer Partie
	I         Index des aktuellen Spielers, [1..N]
	J         Index von `hinten', J := N+1 - I, [N..1]
	M         M := (N+3)/2 - min(I,J)  -->  z.B. 1,2,3,4,5,4,3,2,1
	V         Ergebnis der vorherigen Berechnung
	R         Rang des aktuellen Spielers.
		  Spieler mit der gleichen Punktezahl erhalten den
		  gleichen niedrigen Rang, z.B. 1,2,2,2,5,6,6,8
	RN        Anzahl der Spieler, die den gleichen Rang 'R' haben
	P         Punkte des aktuellen Spielers
	P.1       Punkte des Spielers mit der größten Punktezahl
	 :          :
	P.n       Punkte des Spielers mit der geringsten Punktezahl
	PN        Kürzel für 'P.n'
	B         Binomialkoeffizient des aktuellen Spielers
	B.1       Binomialkoeffizient des ersten Spielers
	 :          :
	B.n       Binomialkoeffizient des letzten Spielers

    Als Vorbereitung für die aktuelle Berechnung der Spielerstärken werden die
    Spielerdaten transformiert.

			===============================

 CALCULATE  (-->define playerlevel)

    Standardformel:  'SUM/WSUM'
    Variablen:
	SUM      Summe der gewichteten Einzelbewertungen
	WSUM     Summe der Gewichtungen
	BEST     Bestes Einzelergebnis des Spielers
	WBEST    Gewichtungsfaktor des besten Einzelergebnisses
	WORST    Schlechtestes Einzelergebnis des Spielers
	WWORST   Gewichtungsfaktor des schlechtesten Einzelergebnisses
	N        Anzahl der Ergebnisse in den Summen

    Innerhalb des iterativen Verfahrens, welches mindestens einmal durchlaufen
    wird, werden die gewichteten (-->WEIGHT) Bewertungen der Spieler in den
    einzelnen Partien (-->CALCULATE/gamelevel) in der Variable SUM aufsum-
    miert. WSUM enthält dann die Summe der Gewichtungen. Sind alle diese
    Gewichtungen '1.0', dann ist WSUM == N.

    Nach der Berechnung für alle Spieler erfolgt eine Normierung der Spieler-
    stärken. Dabei wird jeder Spielerwert mit demselben Faktor multipliziert,
    so daß die Summe der Spielerstärken gleich der Anzahl der Spieler ist.

			===============================

 CALCULATE  (-->define gamelevel)

    Standardformel:  'WEIGHT * P * (SUMLEVEL-LEVEL) / (N-1)'
    Variablen:
	WEIGHT     Gewichtung der Partie := Ergebnis von SELECT
	LEVEL      Stärke des aktuellen Spielers
		   := Ergebnis von CALCULATE/playerlevel
	SUMLEVEL   Summe der Stärken alle Spieler dieser Partie
	GAMELEVEL  Partiestärke := SUMLEVEL/N
	N          Anzahl der Spieler
	P          Punkte des aktuellen Spielers

    Innerhalb des iterativen Verfahrens, welches mindestens einmal durchlaufen
    wird, wird die Stärke jeder Partie aus dem arithmetichen Mittel der
    Spielerstärken berechnet. Mit Hilfe dieser Formel wird die subjektive
    Partienstärke eines jeden Spielers berechnet. So werden z.B. in der
    Standardformel nur die Stärken der Gegner verwendet, indem die eigene
    Stärke wieder herausgerechnet wird. Verzichtet man auf den Faktor WEIGHT,
    so sollte bei CALCULATE/playerlevel die Formel 'SUM/N' anstatt 'SUM/WSUM'
    verwendet werden.

			===============================

 SORT  (-->define sortmode)

    Standardformel:  'LEVEL'
    Variablen:
	LEVEL    Spielerstärke des Spielers nach der letzten Berechnung
		 von CALCULATE/playerlevel nach der Normierung.
	LEVEL0   Spielerstärke des Spielers nach der letzten Berechnung
		 von CALCULATE/playerlevel vor der Normierung.
	GROUP    Gruppennummer des Spielers
	N        Anzahl der Partien des Spielers
	*        Variablen, die spielerbezogen durch den Befehl
		 TRANSFER definiert worden sind.

    Mit dieser Formel wird die Sortierung der Spieler inklusive Rangberechnung
    bestimmt. Spieler mit dem höchsten Wert werden als erstes ausgegeben.
    Spieler mit gleichem Ergebnis erhalten die gleiche Rangnummer.

			===============================

 HEADER, TRAILOR  (-->define printplayer)

    Standardformel:  ''
    Variablen:
	NP       Anzahl der Spieler innerhalb einer Partie

    Das Ergebnis dieser beiden Formeln wie unmittelbar vor (HEADER) und nach
    (TRAILOR) der folgenden Formel (PLAYER) ausgegeben. Damit kann der Kopf
    und der Fußbereich einer Spielertabelle festgelegt werden.


 PLAYER  (-->define printplayer)

    Standardformel:  'print('%4d. %-25s %8.3f',I,NAME,LEVEL)'
    Variablen:
	I        Index des aktuellen Spielers, [1..N]
	R        Rang des aktuellen Spielers.
		 Spieler mit der gleichen Sortierwert erhalten den
		 gleichen niedrigen Rang, z.B. 1,2,2,2,5,6,6,8
	RN       Anzahl der Spieler, die den gleichen Rang 'R' haben
	NAME     Name des aktuellen Spielers
	ID       ID des aktuellen Spielers
	LEVEL    Stärke des Spielers nach der letzten Berechnung
		 von CALCULATE/playerlevel nach der Normierung.
	LEVEL0   Stärke des Spielers nach der letzten Berechnung
		 von CALCULATE/playerlevel vor der Normierung.
	GROUP    Gruppennummer des Spielers
	N        Anzahl der Partien des Spielers
	*        Variablen, die spielerbezogen durch den Befehl
		 SAVEPLAYER definiert worden sind.

    Bei der Ausgabe einer kompletten Spielerliste mittels des Kommandos
    PRINTPLAYER wird zuerst HEADER, danach für jeden Spieler das Ergebnis
    dieser Formel und danach TRAILOR ausgegeben.

			===============================

 HEADER, TRAILOR  (-->define printgame)

    Standardformel:  ''
    Variablen:
	FACTOR     Gewichtungsfaktor, der bei der Partie angegeben wurde ('*nnn')
	WEIGHT     Gewichtung der Partie := Ergebnis von SELECT
	FIRST      Punkte des besten Spielers
	MEAN       Arithmetisches Mittel der Spielerpunkte
	MEDIAN     Median der Spielerpunkte
	MIDDLE     spezieller gewichteter  Mittelpunkt der Spielerpunkte
	BINOMIAL   Mittelwert mit Binomialgewichtung der Spielerpunkte
	GAMELEVEL  Stärke dieser Partie, entsprich der Variable
		   GAMELEVEL aus der Formel CALCULATE/gamelevel
	GAMEGROUP  Gruppennummer der Partie
	SRCFILE    Dateiname der Quelldatei
	SRCLINE    Zeilenummer innerhalb der Quelldatei
	SRCDATE    Zeit der Quelldatei im BinTime-Format (->STREAM.HTM)
	GAMEDATE   Zeit der Partie im DateTime-Format (->STREAM.HTM)
	GAMEID     ID der Partie
	TITLE      Titelzeile des Spieles
	TEXT       Textueller Kommentar innerhalb der Titelzeile
	NP         Anzahl der Spieler innerhalb einer Partie
	*          Variablen, die partienbezogen durch den Befehl
		   SAVEGAME definiert worden sind.

    Das Ergebnis dieser beiden Formeln wird unmittelbar vor (HEADER) und nach
    (TRAILOR) der folgenden Formel (PLAYER) ausgegeben. Damit kann der Kopf
    und der Fußbereich jedes Partienberichts festgelegt werden.


 PLAYER  (-->define printgame)

    Standardformel:  'print('%4d. %-25s %8.3f',I,NAME,LEVEL)'
    Variablen:
	I         Index des aktuellen Spielers, [1..N]
	NAME      Name des aktuellen Spielers
	ID        ID des aktuellen Spielers
	POS       Position des Spielers beim Einlesen der Tabelle
	LEVEL     Stärke des Spielers nach der letzten Berechnung
		  von CALCULATE/playerlevel nach der Normierung.
	LEVEL0    Stärke des Spielers nach der letzten Berechnung
		  von CALCULATE/playerlevel vor der Normierung.
	GLEVEL    Subjektive Stärke des Spielers in dieser Partie,
		  Ergebnis von CALCULATE/gamelevel
	GROUP     Gruppennummer des Spielers
	N         Anzahl der Partien des Spielers
	P0        Punkte des Spielers vor der ersten Transformation
	P         Punktezahl des Spielers nach allen Transformationen
	FACTOR     Gewichtungsfaktor, der bei der Partie angegeben wurde ('*nnn')
	WEIGHT    Gewichtung der Partie := Ergebnis von SELECT
	FIRST     Punkte des besten Spielers
	MEAN      Arithmetisches Mittel der Spielerpunkte
	MEDIAN    Median der Spielerpunkte
	MIDDLE    spezieller gewichteter  Mittelpunkt der Spielerpunkte
	BINOMIAL  Mittelwert mit Binomialgewichtung der Spielerpunkte
	GAMELEVEL Stärke dieser Partie, entsprich der Variable
		  GAMELEVEL aus der Formel CALCULATE/gamelevel
	SRCFILE   Dateiname der Quelldatei
	SRCLINE   Zeilenummer innerhalb der Quelldatei
	SRCDATE   Zeit der Quelldatei im BinTime-Format (->STREAM.HTM)
	GAMEDATE  Zeit der Partie im DateTime-Format (->STREAM.HTM)
	GAMEID    ID der Partie
	NP        Anzahl der Spieler innerhalb einer Partie
	*          Variablen, die spielerbezogen durch den Befehl
		  TRANSFER definiert worden sind.

    Bei der Ausgabe einer kompletten Partienliste mittels des Kommandos
    PRINTGAMES wird für jede Partie zuerst HEADER, danach für jeden Spieler
    das Ergebnis dieser Formel und danach TRAILOR ausgegeben.


5.   Ausgabedateien

  --- ??? ---  

 Es existieren vier Ausgabekanäle:
	- stderr
	- Ausgabedatei via OUTPUT
	- Fehlerdatei via ERRORLOG
	- Druckdatei via PRINTFILE

 Über `stderr' werden Ausgaben gemäß LOG-Mode vorgenommen.
 Die Ausgabedatei enthält alle vom Programm erzeugten Ausgaben.

 In die Fehlerdatei werden alle Informationen gemäß LOG-Mode ALL sowie alle
 Fehler ausgegeben. Ist keine Fehlerdatei angegeben, so werden die
 Fehlermeldungen in die Ausgabedatei geschrieben.

 In die Ausgabedatei werden alle Listen durch LIST und zusätzliche
 Informationen geschrieben.

 In die Druckdateien werden alle Ausgaben durch PRINTGAME und PRINTPLAYER
 geschrieben.