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!

Moderators: Pete, Mods

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