6.6 ContestDie variable Contestauswertung macht es möglich, das jeder beliebige Contest eingegeben werden kann und MLog die Auswertung übernimmt. Natürlich kann immer nur eine Klasse ausgewertet werden. Die Auswertung nimmt immer das ganze Log als Basis für die Auswertung, daher ist es notwendig, das eigene Log zunächst mit Excel oder LogConverter (s. Tools) auf die gewünschten QSOs zu beschränken. FelderFolgende Felder stehen in der Contestauswertung zur Verfügung: fNumber Diese Felder werden wie Variablen in den Bedingungen eingesetzt (s.u.) FunktionenFolgende Funktionen stehen in der Contestauswertung zur Verfügung: copy(STRING, START, LENGTH) Gibt die über START und LENGTH definierten Zeichen aus dem STRING zurück, wobei das erste Zeichen an der Position 1 ist, das zweite an 2 u. s. w.. So gilt z. B.: copy("hallo", 2, 2) eq "ll" pos(SUBSTRING, STRING) Gibt die Position des ersten Zeichens eines SUBSTRINGs in einem STRING zurück. Ist dieses Zeichen nicht im STRING vorhanden, so wird 0 zurückgegegben. So gilt z. B.: pos("l", "hallo") eq 2 length(STRING) Gibt die Länge eines STRINGs zurück. So gilt z. B.: length("hallo") eq 5 (Die Funktionen orientieren sich an den gleichnamigen Funktionen in Delphi.) VerwendungAlle konstanten Werte müssen entweder Zahlen sein, oder in " (doppelten Anführungszeichen) stehen (was dann ein String wäre). Findet MLog Zeichenfolgen, die weder eine Zahl, noch ein String, noch eine Variable (also ein Feld), noch eine Funktion sind, wird folgender Fehler ausgelöst: In diesem Fall war hugo die Zeichenfolge, mit der MLog nichts anzufangen wusste. Als "hugo" wäre es als ein String mit dem Inhalt hugo angenommen worden. Kommen wir jetzt zur Anwndung dieses Wissens: In der Tabelle der Regeln muss beim anlegen einer neuen Regel als erstes in Spalte 3 angegegben werden, um was es sich handelt. Hier ist nur PKT für Punkt oder MLT für Multiplikator möglich. Alle anderen Werte in dieser Spalte führen zu Fehlern. Nun muss in der zweiten Spalte angegeben werden, wieviel Punkte/Multiplikatoren diese Regel vergeben soll. In dieser Spalte dürfen daher nur Zahlen bzw. Ausdrücke die am Ende zu einer Zahl führen stehen. Ein solcher Ausdruck wäre zum Beispiel auch: copy(fRstRx, pos(" ", fRstRx) - 1, length(fRstRx) - pos(" ", fRstRx)) Dieses Beispiel geht davon aus, dass im Feld RstRx - also dem erhaltenen Rapport - nicht nur dieser, sondern auch immer nach einem Leerzeichen eine weitere Zahl folgt. Dies wäre zum Beispiel das Alter des Operators (QSO-Party). Mit diesem entnimmt die Funktion copy immer diese Zahl nach dem Leerzeichen und gibt sie zurück. (Hierbei macht es - anders als bei Delphi - keinen Unterschied, dass die Funktion copy eigentlich einen String und keine Zahl zurückgibt.) Ist dies erledigt funktioniert diese Regel schon und gibt jedem QSO diese Punkte oder Multiplikatoren (je nach dem, für was man sich entschieden hat). Um dies nun noch weiter einzuschränken gibt es die erste und die letzte Spalte. Mit der ersten lässt sich definieren, welche Felder alle gleich sein müssen, damit die Regel nicht mehr ausgeführt wird. D. h. steht in dieser Spalte fCall, wird die Regel nur angewendet, wenn das Call nicht bereits weiter oben aschon einmal voprgekommen ist im akteullen Logbuch. Steht in diesem Feld fCall;fBand;fMode würde dies alleine nicht dazu führen, dass die Regel nicht merh gültig ist. Nun müssen Band, Mode und Rufzeichen in der Konstellation schon einmal vorgekommen sein, damit die Regel nicht noch einmal wirkt. Dies ist zu vergelcihen mit folgender Formulierung aus einer Contestausschreibung: "Multiplikatoren pro Band und pro Mode". Allerdings sind auch hier kompliziertere Konstrukte möglich. So prüft zum Beispiel copy(fCall,1,1), ob der erste Buchstaben des Rufzeichens schon einmal als solcher vorgekommen ist. Die letzte Spalte ist die mächtigste, denn hier können mehre Bedingungen (wiederrum getrennt durch ein ; (Semikolon)) angegeben werden, die erfüllt sein müssen, damit die Regel angewendet wird. Eine solche Bedingung besteht im Kern immer aus eq (gleich - eng. equal) oder neq (ungleich - engl. not equal). So würde zum Beispiel die Bedingung "hallo" eq "hugo" immer dazu führen, dass eine Regel nicht mehr ausgeführt wird, da "hallo" nie das gleiche ist wie "hugo" − wer hätte das auch erwartet ;-) Nimmt man nun hingegen copy(fCall,1,1) neq "D", so wird die Bedingung nur noch ausgeführt, wenn der erste Buchstabe des Rufzeichens ein D ist. (In diesem Fall ist aber meistens die Verwendung von fPrefix als Alternative zu fCall sinnvoller, da fPrefix immer den Prefix enthält, unter dem das Land als DXCC bekannt ist. So gilt fPrefix eq "DL" auch, wenn das Feld fCall DB7BN enthält.) Gut zu wissen ist außerdem noch, dass alle Überprüfung ohne Rücksicht auf groß bzw klein schreibung vorgenommen werden. D. h. folgende Bedingung gilt: "HUGO" eq "hugo" Strings, Zahlen, Variablen, Funktionen, Neu, Wert, Art, BedingungButtons
Fügt der Tabelle eine neue Spalte hinzu.
Bietet die Möglichgeit einen Satz Regeln zu laden.
Bietet die Möglichkeit einen Satz Regeln zu speichern.
Löscht ohne Nachfrage (!) die aktuelle Zeile.
Startet die Auswertung des Contestes. Dies kann ein wenig dauern.
Exportiert die Tabelle unter Ergebnis nach Excel zur weiteren Verwendung. www.schmitz-sh.de/mlog/06-6.htm |