DECLARE FUNCTION BetterVal! (x$) DECLARE SUB op (a$) DECLARE SUB ShowEventResult (e!) DECLARE SUB SortEvent (k!) DECLARE SUB InitScores () DECLARE SUB AnalyseCSV () CONST NUMEVENTS = 12 CONST NUMTOP = 3 CONST NUMCONFIG = 1 CONST FIELDLEN = 25 CONST LEFTLEN = 18 CONST STYLE = 0 CONST UPDOWN = 0 ' field name CONST SORTUP = 1 CONST SORTDOWN = 0 COMMON SHARED file$, ageselect, opri, head$ ' Read a CSV from 5Star and produce top NUMTOP in each group DIM SHARED score(NUMEVENTS, NUMTOP), scorecfg%(NUMEVENTS, NUMCONFIG) DIM SHARED name$(NUMEVENTS, NUMTOP), eventname$(NUMEVENTS) DO COLOR 15, 0: CLS COLOR 12: PRINT "Adam's 5-Star Award Top Three Program": COLOR 15 PRINT "Hope you've remembered to produce the CSVs from 5Star." PRINT "Turn results on and awards off." PRINT opri = 1 INPUT "School year to analyse? ", year PRINT "Please wait..." RESTORE yeardata IF year > 1 THEN FOR k = 1 TO year - 1 READ dum$, dum NEXT k END IF READ file$, ageselect RESTORE eventdata FOR k = 1 TO NUMEVENTS READ scorecfg%(k, UPDOWN), eventname$(k) NEXT k InitScores AnalyseCSV CLS count = 0 BEEP LINE INPUT "Press return to print", dum$ ' op CHR$(27) + CHR$(45) + CHR$(1) + ";" op "------ Top" + STR$(NUMTOP) + " for each event in year" + STR$(year) + ", age" + STR$(year + 11) + CHR$(13) ' op CHR$(27) + CHR$(41) + CHR$(0) + ";" FOR k = 1 TO NUMEVENTS count = count + 1 ShowEventResult k IF opri = 0 AND count = 4 THEN PRINT : LINE INPUT "", dum$: count = 0: CLS NEXT k IF opri > 0 THEN op CHR$(12) BEEP LINE INPUT "Do another? [y/n] ", yn$ LOOP UNTIL yn$ = "n" SYSTEM ' Names are read from the CSV anyway eventdata: DATA 0,100m,0,200m,0,400m,0,800m,0,1500m,0,Hurdles DATA 1,High,1,Long,1,Triple,1,Shot,1,Discus,1,Javelin yeardata: DATA "97YR12",12, "97YR12",13, "97YR3",0, "97YR4",0, "97YR5",0 SUB AnalyseCSV file = FREEFILE fieldlength = NUMEVENTS + 3 OPEN file$ + ".CSV" FOR INPUT SHARED AS file INPUT #file, dum$: INPUT #file, dum$: INPUT #file, dum$ ' clear name, gender, age PRINT "Reading event names..." FOR k = 1 TO NUMEVENTS INPUT #file, eventname$(k) NEXT k PRINT "Analysing athletes..." DO INPUT #file, name$ LOCATE CSRLIN, 1: PRINT " "; : LOCATE CSRLIN, 1: PRINT name$; INPUT #file, gender$ INPUT #file, age$: age = VAL(age$) FOR k = 1 TO NUMEVENTS INPUT #file, rec$: rec = BetterVal(rec$) IF (ageselect = 0 OR ageselect = age) AND rec$ <> "" AND (((scorecfg%(k, UPDOWN) = 0) AND (rec < score(k, NUMTOP))) OR ((scorecfg%(k, UPDOWN) = 1) AND (rec > score(k, NUMTOP)))) THEN ' new record! score(k, NUMTOP) = rec name$(k, NUMTOP) = name$ ' + " (" + age$ + ")" 'PRINT "New record: " + name$ + " " + eventname$(k) + " "; rec SortEvent k END IF NEXT k LOOP UNTIL EOF(file) CLOSE file END SUB FUNCTION BetterVal (x$) IF INSTR(x$, ":") > 0 THEN BetterVal = (VAL(LEFT$(x$, INSTR(x$, ":"))) * 60) + VAL(RIGHT$(x$, LEN(x$) - INSTR(x$, ":"))) ELSE BetterVal = VAL(x$) END IF END FUNCTION SUB InitScores PRINT "Initialising scores..." FOR k = 1 TO NUMEVENTS IF scorecfg%(k, UPDOWN) = 0 THEN FOR j = 1 TO NUMTOP score(k, j) = 999.99 NEXT j ELSE FOR j = 1 TO NUMTOP score(k, j) = 0 NEXT j END IF NEXT k END SUB SUB op (b$) a$ = b$: k = 0 IF RIGHT$(a$, 1) = ";" THEN a$ = LEFT$(a$, LEN(a$) - 1): k = 1 SELECT CASE k CASE 0 PRINT a$ IF opri = 1 THEN LPRINT a$ CASE 1 PRINT a$; IF opri = 1 THEN LPRINT a$; END SELECT END SUB SUB ShowEventResult (e) SELECT CASE STYLE CASE 0 head$ = LEFT$(eventname$(e) + STRING$(LEFTLEN, " "), LEFTLEN) FOR k = 1 TO NUMTOP IF score(e, k) <> 999.99 AND score(e, k) <> 0 THEN op head$ + " " + STR$(k) + ". " + LEFT$(name$(e, k) + STRING$(FIELDLEN, " "), FIELDLEN) + STR$(score(e, k)) ELSE 'IF k = 1 THEN op STR$(k) + ". --No results--" op head$ + " " + STR$(k) + ". --" END IF head$ = STRING$(LEFTLEN, " ") NEXT k op "" CASE 1 head$ = LEFT$(eventname$(e) + " " + STRING$(LEFTLEN - 1, "-"), LEFTLEN) md$ = ". " f = FIELDLEN FOR k = 1 TO NUMTOP IF score(e, k) <> 999.99 AND score(e, k) <> 0 THEN op head$ + STR$(k) + md$ + LEFT$(name$(e, k) + STRING$(FIELDLEN, " "), f) + STR$(score(e, k)) ELSE op head$ + STR$(k) + md$ + "--" END IF head$ = STRING$(LEFTLEN + 2, " ") f = FIELDLEN - 2 NEXT k END SELECT END SUB SUB SortEvent (e) 'PRINT "Sorting event " + eventname$(e) IF scorecfg%(e, UPDOWN) = 0 THEN DO madechange = 0 FOR k = NUMTOP - 1 TO 1 STEP -1 IF score(e, k + 1) < score(e, k) THEN SWAP score(e, k + 1), score(e, k) SWAP name$(e, k + 1), name$(e, k) madechange = 1 END IF NEXT k LOOP UNTIL madechange = 0 ELSE DO madechange = 0 FOR k = 1 TO NUMTOP - 1 IF score(e, k + 1) > score(e, k) THEN SWAP score(e, k + 1), score(e, k) SWAP name$(e, k + 1), name$(e, k) madechange = 1 END IF NEXT k LOOP UNTIL madechange = 0 END IF END SUB