Page 1 of 1

Syntax error on all priming/initial reads? Help!

Posted: Sun Oct 28, 2012 2:23 am
by Keruberosu
Can somebody help me with this? I've been trying to change the program to work for reading the data, however they all result to SYNTAX errors. Any solutions?

Problems: READ DAY% - both of them
and READ DAY% ROOM%(ROW%,1), ROOM%(ROW%,2), ROOM%(ROW%,3)


CLS
DIM ROOM%(1 TO 999, 1 TO 3)
DIM PATIENT$(1 TO 999, 1 TO 5)
DIM DAY%(1 TO 999)
DIM TOTAL%(1 TO 999, 1 TO 3)

PRINT "WeFixU Hospital"
PRINT "Weekly Room Charge Report"
PRINT "========================="
PRINT: PRINT

GOSUB READ.DATA
GOSUB CALC
GOSUB OUTPUT.DATA
END

DATA "Drew","Shin","PRIVATE","YES","YES",7
DATA "Hart","Caore","SEMI-PRIVATE","Yes","NO",6
DATA "Neg","Presse","WARD","NO","Yes",5
DATA "Know","Engrish","Private","No","No",4
DATA "Keendov","Rich","Semi-Private","no","yes",3
DATA "Paw","Boi","Ward","yes","no",2
DATA "Rich","Gai","private","YES","YES",1
DATA "Test","Invalid","Motel","Always","Never",0
DATA "Herp","Derp","Hotel","Maybe","Maybe",8

READ.DATA:

ROW% = 1

READ PATIENT$(ROW%, 1), PATIENT$(ROW%, 2), PATIENT$(ROW%, 3)
READ PATIENT$(ROW%, 4), PATIENT$(ROW%, 5)
READ DAY%

DO WHILE DAY%(ROW%) > 1 AND DAY%(ROW%) <= 7
SELECT CASE PATIENT$(ROW%, 3)
CASE IS = "PRIVATE"
LET ROOM%(ROW%, 1) = 125
CASE IS = "Private"
LET ROOM%(ROW%, 1) = 125
CASE IS = "private"
LET ROOM%(ROW%, 1) = 125
CASE IS = "SEMI-PRIVATE"
LET ROOM%(ROW%, 1) = 95
CASE IS = "Semi-Private"
LET ROOM%(ROW%, 1) = 95
CASE IS = "semi-private"
LET ROOM%(ROW%, 1) = 95
CASE IS = "WARD"
LET ROOM%(ROW%, 1) = 75
CASE IS = "Ward"
LET ROOM%(ROW%, 1) = 75
CASE IS = "ward"
LET ROOM%(ROW%, 1) = 75
CASE ELSE
LET FLAG! = 1
END SELECT

SELECT CASE PATIENT$(ROW%, 4)
CASE IS = "YES"
LET ROOM%(ROW%, 2) = 1.75
CASE IS = "Yes"
LET ROOM%(ROW%, 2) = 1.75
CASE IS = "yes"
LET ROOM%(ROW%, 2) = 1.75
CASE IS = "NO"
LET ROOM%(ROW%, 2) = 0
CASE IS = "No"
LET ROOM%(ROW%, 2) = 0
CASE IS = "no"
LET ROOM%(ROW%, 2) = 0
CASE ELSE
LET FLAG! = 1
END SELECT
SELECT CASE PATIENT$(ROW%, 5)
CASE IS = "YES"
LET ROOM%(ROW%, 3) = 3.5
CASE IS = "Yes"
LET ROOM%(ROW%, 3) = 3.5
CASE IS = "yes"
LET ROOM%(ROW%, 3) = 3.5
CASE IS = "NO"
LET ROOM%(ROW%, 3) = 0
CASE IS = "No"
LET ROOM%(ROW%, 3) = 0
CASE IS = "no"
LET ROOM%(ROW%, 3) = 0
CASE ELSE
LET FLAG! = 1
END SELECT
LET ROW% = ROW% + 1

READ PATIENT$(ROW%, 1), PATIENT$(ROW%, 2), PATIENT$(ROW%, 3)
READ PATIENT$(ROW%, 4), PATIENT$(ROW%, 5)
READ DAY%

LOOP
RETURN

Posted: Sun Oct 28, 2012 2:32 am
by Keruberosu
Second part:

CALC:
ROW% = 1

READ DAY%, ROOM%(ROW%, 1), ROOM%(ROW%, 2), ROOM%(ROW%, 3)

DO WHILE DAY%(ROW%) > 1 AND DAY%(ROW%) <= 7

READ DAY%, ROOM%(ROW%, 1), ROOM%(ROW%, 2), ROOM%(ROW%, 3)
READ ACC.TOT!
IF ACC.TOT! = 1 THEN
LET TOTAL%(ROW%, 3) = TOTAL%(ROW%, 2) + TOTAL%(ROW%, 1)
ELSE
LET TOTAL%(ROW%, 1) = ROOM%(ROW%, 1) * DAY%(ROW%)
LET CHARGES% = ROOM%(ROW%, 2) * DAY%(ROW%)
LET TOTAL%(ROW%, 1) = TOTAL%(ROW%, 1) + CHARGES%
LET CHARGES% = ROOM%(ROW%, 3) * DAY%(ROW%)
LET TOTAL%(ROW%, 1) = TOTAL%(ROW%, 1) + CHARGES%
LET TOTAL%(ROW%, 2) = TOTAL%(ROW%, 1)
LET ACC.TOT! = 1
END IF
LET ROW% = ROW% + 1
READ DAY%, ROOM%(ROW%, 1), ROOM%(ROW%, 2), ROOM%(ROW%, 3)
LOOP
RETURN

Posted: Sun Oct 28, 2012 2:32 am
by Keruberosu
Last and third part

OUTPUT.DATA:
ROW% = 1

READ PATIENT$(ROW%, 1), PATIENT$(ROW%, 2), PATIENT$(ROW%, 3)
READ PATIENT$(ROW%, 4), PATIENT$(ROW%, 5)
READ DAY%


DO WHILE DAY%(ROW%) > 1 AND DAY%(ROW%) <= 7
IF FLAG! = 1 THEN
PRINT PATIENT$(ROW%, 1); "INVALID DATA"
ELSEIF FLAG! = 0 THEN
PRINT USING "\ \"; PATIENT$(ROW%, 1);
PRINT USING "\ \"; PATIENT$(ROW%, 2);
PRINT USING "#"; DAY%(ROW%);
PRINT USING "\ \"; PATIENT$(ROW%, 3);
PRINT USING "\ \"; PATIENT$(ROW%, 4);
PRINT USING "\ \"; PATIENT$(ROW%, 5)
END IF
IF ACC.TOT! = 1 THEN
PRINT "================================="
PRINT "Total accumulated costs: "
PRINT USING "#####.##"; TOTAL%(ROW%, 3);
PRINT "================================="
END IF
LET ROW% = ROW% + 1
READ PATIENT$(ROW%, 1), PATIENT$(ROW%, 2), PATIENT$(ROW%, 3)
READ PATIENT$(ROW%, 4), PATIENT$(ROW%, 5), DAY%

LOOP
RETURN

Posted: Mon Oct 29, 2012 10:21 am
by burger2227
The number of READ variables must match the number of data values in the DATA field.

READ PATIENT$(ROW%, 1), PATIENT$(ROW%, 2), PATIENT$(ROW%, 3)
READ PATIENT$(ROW%, 4), PATIENT$(ROW%, 5)
READ DAY%

Reads 6 pieces of data. Your field only has 5 per row so eventually it will read past the end of data.

Use RESTORE to re-read the same DATA again. It moves the next READ to the start of data. Try:

READ PATIENT$(ROW%, 1), PATIENT$(ROW%, 2), PATIENT$(ROW%, 3), PATIENT$(ROW%, 4), PATIENT$(ROW%, 5)