Syntax error on all priming/initial reads? Help!

If you have questions about any aspect of QBasic programming, or would like to help fellow programmers solve their problems, check out this board!
Post Reply
Keruberosu
Newbie
Posts: 3
Joined: Sun Oct 28, 2012 2:20 am

Syntax error on all priming/initial reads? Help!

Post 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
Last edited by Keruberosu on Sun Oct 28, 2012 2:44 am, edited 2 times in total.
Keruberosu
Newbie
Posts: 3
Joined: Sun Oct 28, 2012 2:20 am

Post 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
Last edited by Keruberosu on Sun Oct 28, 2012 2:38 am, edited 1 time in total.
Keruberosu
Newbie
Posts: 3
Joined: Sun Oct 28, 2012 2:20 am

Post 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
User avatar
burger2227
Veteran
Posts: 2466
Joined: Mon Aug 21, 2006 12:40 am
Location: Pittsburgh, PA

Post 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)
Please acknowledge and thank members who answer your questions!
QB64 is a FREE QBasic compiler for WIN, MAC(OSX) and LINUX : https://www.qb64.org/forum/index.php
Get my Q-Basics demonstrator: https://www.dropbox.com/s/fdmgp91d6h8ps ... s.zip?dl=0
Post Reply