* Filma Top 10
* Mozhno budet eshe sdelat' 'top according to...'
'TOP'
'NOMSG /€¤àí'
IF RC>0 THEN CALL ABORT '€¤àí not found'
Y.=''; X.=''; N.=''
Z=''; J=''; P=''; A=''
DO I=1
'NOMSG /
'
IF RC>0 THEN LEAVE
L=CURLINE.3()
PARSE VAR L '' N.I '
'
N.I=STRIP(N.I)
'NOMSG /0 THEN CALL ABORT ' | ' X.1.I ' | ' X.2.I ' | ' X.3.I ' | ' X.4.I
/**'POINT .TTT'; 'SET DEBUGG ON'; 'LOCATE .TTT'; TRACE ?R */
DO J=1 TO 4
X.J.I=STRIP(X.J.I)
X=X.J.I
IF ^DATATYPE(X,'N') THEN X='&NBSP'
IF POS('+',X)>0 THEN DO
X=LEFT(X,1) || '.25'
/* for example, 4+ will count as 4.25, and 5- as 4.75 */
END
IF POS('-',X)>0 THEN DO
X=LEFT(X,1)-1 || '.75'
END
X.J.I=X
IF X.J.I<>'&NBSP' THEN Y.J=Y.J X.J.I
END
END
NU=I-1
'NOMSG ERASE AVERAGE.TMP'
DO I=1 TO 4
'PUT LINE AVERAGE.TMP' Y.I
END
'DOSQUIET AVERAGE'
F=FILEID.1()
'X AVERAGE.TMP'
DO I=1 TO SIZE.1()
':'I
Y.I=CURLINE.3()
IF Y.I='' THEN Y.I=3 /* sredn'aja ocenka, esli net nikakih */
END
/** Average scores are now in Y.I */
'QQUIT'
'X' F
/* Now we can get to calcing filma scores */
'NOMSG ERASE AVERAGE.TMP'
/**'POINT .TTT'; 'SET DEBUGG ON'; 'LOCATE .TTT'; TRACE ?R */
DO I=1 TO NU
DO J=1 TO 4
IF X.J.I='' | X.J.I='&NBSP' THEN X.J.I=Y.J
/* when no score, use this person's average */
END
'PUT LINE AVERAGE.TMP' X.1.I X.2.I X.3.I X.4.I
END
'DOSQUIET AVERAGE'
/* This BREXX prg will replace lines in AVERAGE.TMP with their average values */
F=FILEID.1()
/* Now in this file we have average scores by filma */
'X AVERAGE.TMP'
DO I=1 TO SIZE.1()
':'I
L=CURLINE.3()
'R' LEFT(L,10) LINE.1()
/* store line numbers, so that we still know what filma */
/* we are talking about after sorting */
END
'SORT ALL DESC' /* descending order */
DROP X. Y. Z P J A
/**'POINT .TTT'; 'SET DEBUGG ON'; 'LOCATE .TTT'; TRACE ?R */
'NOMSG ERASE TOP.HTM'
PAY='PUT LINE TOP.HTM'
PAY ''
PAY '| # | Name | Score'
DO I=1 TO 10
':'I
IF RC>0 THEN LEAVE
L=CURLINE.3()
PARSE VAR L S.I U /* scores and numbers */
S.I=STRIP(S.I)
U=STRIP(U)
T.I=N.U
PAY ' |
|---|
| ' I ' | ' T.I ' | ' STRIP(SUBSTR(S.I,1,3))
END
PAY ' |
|---|
'
'X TOP.HTM'
EXIT
*GET ABORT
ABORT: PROCEDURE
*Version 2.01 - show current module name
PARSE ARG A
PARSE SOURCE . . ME .
PARSE VAR ME ME '.'
IF A<>'' THEN 'ALERT' DELIMIT(A) 'TITLE' DELIMIT(UPPER(ME))
EXIT
RETURN
|