Page 1 of 2
Syntax Error
Posted: Mon Oct 15, 2012 1:53 am
by JasonQuinn1992
Why am I getting a syntax error on this line:
" READ man$, Yr, Make, Model, Desc, Price"
My code:
' Program that lists inventory for your collection of model cars
'
'
'
' Variables Used
' T1$, H1$, H2$, D1$ Print images
' TL$ Print images
' man$ Manufacturer #
' Yr Year Of Csr
' Make Make of Car
' Model Model Of Car
' Desc Description of car
' Price Price Of Car
' Program Mainline
CLS
GOSUB InitializeVariables
GOSUB PrintHeadings
GOSUB ProcessDetail
GOSUB PrintTotals
END
' Initalize Variables
InitializeVariables:
LET T1$ = ""
LET H1$ = ""
LET H2$ = " Manufacturer # Yr Make Description Price"
LET D1$ = "\ \ ## \ \ \ \ $ ###.##"
LET TL$ = " TOTAL $ ###.##"
RETURN
'
' Initialize Imagees
InitializeImages:
' T1$ Title Line
' H1$, H2$ Column Headings
' D1$ Deatail (manufacturer #, Yr, Make, description, price)
' TL$ Totals
' LPRINT HEADINGS
PrintHeadings:
PRINT T1$; 'Print title line
PRINT
PRINT H1$ 'Print column headings, line 1
PRINT H2$ 'Print column headings, line 2
PRINT
RETURN
' Process Detail
ProcessDetail:
GOSUB ReadData
DO UNTIL UCASE$(man$) = "END"
GOSUB PrintDetail
GOSUB ReadData
LOOP
RETURN
' Read Input Data
ReadData:
READ man$, Yr, Make, Model, Desc, Price
DATA BMR-R79, 49, FIAT, 500B, GILLETE RAZOR, $7.99
DATA HOTWELS-34, 57, CHEVY, NOMAD, 4/DR STATION WAGON, $12.95
DATA MATCHBX-878, 73, FORD, BRONC, 3/DR 4X4 RED SPARE WHL, $25.99
DATA MATCHBX-72, 69, BUIK, CENTY, YELLOW TAXI, $1.49
DATA BRM-R88, 34, BUGANT, TY575, RACER, BLACK $35.00
DATA MATCHBX-25, 80, LINCO, MRKIV, WHITE, LIMOUSINE, $14.99
DATA LESNEY-Y42, 82, CHEVY, MALBU, 4/DR GREEN PASSENGER, $1.99
DATA HASBRO-119, 75, AMC, GRMLN, 2/DR SENAN, YELLOW, $1.69
DATA TABY-6332, 71, TOYOT, CELIC, 2/DR SEDAN, BLUE, $2.99
DATA BMR-SY238, 36, ROLRY, SYLVC, 4/DR SEDAN, SILVER-GRAY, $60.00
RETURN
' Print Detail
PrintDetail:
LPRINT USING H2$; man$; Yr; Make; Model; Desc; Price
RETURN
' Print Totals
PrintTotals:
PRINT
PRINT USING TL$; Price
RETURN
Posted: Mon Oct 15, 2012 3:50 pm
by burger2227
Take the DATA out of the GOSUB routine. Use a loop to read more than one line of data. Use RESTORE to start reading from the start again if needed.
DATA cannot be inside of the procedure.
Posted: Mon Oct 15, 2012 5:02 pm
by JasonQuinn1992
OK so I should have it like this?
' Process Detail
ProcessDetail:
DO UNTIL UCASE$(man$) = "END"
GOSUB PrintDetail
GOSUB PrintTotals
LOOP
RETURN
' Read Input Data
GOSUB ReadData
PRINT man$, Yr, Make, Model, Desc, Price
Posted: Mon Oct 15, 2012 6:17 pm
by burger2227
You can put GOSUB ReadData in the loop too, but you will have to add and END line of DATA or count the times data is read:
DATA "END" , 0, " ", " ", " ", " ", " "
Posted: Mon Oct 15, 2012 7:30 pm
by JasonQuinn1992
Now I get a Tpe Mismatch error error on this line:
PRINT USING H2$; man$; Yr; Make$; Model$; Desc$; Price$
Posted: Mon Oct 15, 2012 8:09 pm
by burger2227
According to your READ statement they are not strings:
READ man$, Yr, Make, Model, Desc, Price
PRINT USING H2$; man$; Yr; Make$; Model$; Desc$; Price$
The types must match! QB thinks Model is a number while Model$ is a string value.
Posted: Mon Oct 15, 2012 10:07 pm
by JasonQuinn1992
I did that because i thought i would fix the syntax error but it didnt..... the type mismatch is resolved but now the syntax error is back on the READ man$, Yr, Make$, Model$, Desc$, Price line here is how I have my process code and read data:
ProcessDetail:
GOSUB ReadData
DO UNTIL UCASE$(man$) = "END"
GOSUB PrintDetail
LOOP
RETURN
' Read Input Data
PRINT man$, Yr, Make$, Model$, Desc$, Price
ReadData:
READ man$, Yr, Make$, Model$, Desc$, Price
DATA BMR-R79, 49, FIAT, 500B, GILLETE RAZOR, $7.99
DATA HOTWELS-34, 57, CHEVY, NOMAD, 4/DR STATION WAGON, $12.95
DATA MATCHBX-878, 73, FORD, BRONC, 3/DR 4X4 RED SPARE WHL, $25.99
DATA MATCHBX-72, 69, BUIK, CENTY, YELLOW TAXI, $1.49
DATA BRM-R88, 34, BUGANT, TY575, RACER, BLACK $35.00
DATA MATCHBX-25, 80, LINCO, MRKIV, WHITE, LIMOUSINE, $14.99
DATA LESNEY-Y42, 82, CHEVY, MALBU, 4/DR GREEN PASSENGER, $1.99
DATA HASBRO-119, 75, AMC, GRMLN, 2/DR SENAN, YELLOW, $1.69
DATA TABY-6332, 71, TOYOT, CELIC, 2/DR SEDAN, BLUE, $2.99
DATA BMR-SY238, 36, ROLRY, SYLVC, 4/DR SEDAN, SILVER-GRAY, $60.00
DATA END,0,0,0,0,0
RETURN
i need to be able to calculate the total price by equaling the sum of all prices... so maybe I have something wrong in the process code?
Posted: Tue Oct 16, 2012 12:33 am
by burger2227
You can't put the DATA inside the GOSUB routine. DATA can be placed anywhere else. You can label it and use RESTORE MyData to read it again.
Commas in DATA separates values. You can only have 6 values per row to match up the data with your variables.
Code: Select all
CLS
H2$ = "Vehicle & Yr: ## Make: & & Desc: & Price $&"
'RESTORE MyData
DO
GOSUB ReadData
IF man$ = "END" THEN EXIT DO
GOSUB PrintDetail
'SLEEP
LOOP
END
ReadData:
READ man$, Yr, Make$, Model$, Desc$, Price$
RETURN
PrintDetail:
PRINT USING H2$; man$; Yr; Make$; Model$; Desc$; Price$
RETURN
MyData:
DATA BMR-R79,49,FIAT,500B,GILLETE RAZOR,7.99
DATA HOTWELS-34,57,CHEVY,NOMAD,4/DR STATION WAGON,12.95
DATA MATCHBX-878,73,FORD,BRONC,3/DR 4X4 RED SPARE WHL,25.99
DATA MATCHBX-72,69,BUIK,CENTY,YELLOW TAXI,1.49
DATA BRM-R88,34,BUGANT,TY575,RACER BLACK ,35.00
DATA MATCHBX-25,80,LINCO,MRKIV,WHITE LIMOUSINE,14.99
DATA LESNEY-Y42,82,CHEVY,MALBU,4/DR GREEN PASSENGER,1.99
DATA HASBRO-119,75,AMC,GRMLN,2/DR SEDAN YELLOW,1.69
DATA TABY-6332,71,TOYOT,CELIC,2/DR SEDAN BLUE,2.99
DATA BMR-SY238,36,ROLRY,SYLVC,4/DR SEDAN BLACK,60.00
DATA "END",0,0,0,0,0,0
PRINT USING needs symbols to place string values.
& will place any length string, but may run too wide for the screen
\ \ will limit a string to a fixed length set by the spaces from one to the other including slashes.
## will give you the 2 numerical digits
http://qb64.net/wiki/index.php?title=PRINT_USING
Posted: Tue Oct 16, 2012 1:14 am
by JasonQuinn1992
somehow Im getting a type mismatch error on
PRINT USING H2$; man$; Yr; Make$; Model$; Desc$; Price
I get that everything has to match and it is
Posted: Tue Oct 16, 2012 10:03 am
by burger2227
Change Price to Price$. It has to be a string or you will need ###.##. in the template. Also you cannot use $ with the DATA number value, only a string value. In the template you can put the $ before a string or put $$###.## for just the decimal point number. $ does not need to be in the DATA.
Template symbol $$ places a $ immediately before the highest non-zero digit with numbers only. That way you can use more # digits than you need
Posted: Tue Oct 16, 2012 1:00 pm
by JasonQuinn1992
I changed everything as you said and as I was told by my instructor but i keep getting error, either the syntax or type mismatch.... this time its type mismatch on this line....
READ man$, Yr, Make$, Model$, Desc$, Price$
and when i tried changing it to look like the "PRINT" line I got an "expected , or end-of-statement" error
ReadData:
READ man$, Yr, Make$, Model$, Desc$, Price$
RETURN
Posted: Tue Oct 16, 2012 3:37 pm
by burger2227
You can read and print everything as strings. Try that!
If you get an Out of Data error, check that each DATA line has 6 values.
Did you try my code? It works.
Posted: Tue Oct 16, 2012 4:11 pm
by JasonQuinn1992
I retried your code and it worked! Now however I m not sure where to put my GOSUB to calculate the total price for all the cars within the Process Data?
And is there anyway to put the data into column form so they lineup with my headings?
Posted: Tue Oct 16, 2012 5:02 pm
by burger2227
You can put that loop back into your GOSUB routine. I copied it from that. Just move END above all of your GOSUB procedures and after the calls in the main program area END prevents a RETURN without GOSUB error.
Line up the header print and the template:
Code: Select all
PRINT "Vehicle Year Make Model Description Price"
temp$ = "& & & & & $&"
Since your string values are longer some places, this may not be easy to do. It is trial and error so use PRINT USING to see what it look like on the screen before using LPRINT and wasting ink and paper.
You could use PRINT #1, USING to print the text to a file and use Notepad to print it on the printer later. Thet would just require using a SHELL command to Notepad.
Posted: Tue Oct 16, 2012 5:37 pm
by JasonQuinn1992
that seems to work a little bit.... under my Print Detail couldnt I replace the H2$ with my my detail line, D1$ to print the data is straight columns...?? I ask because when I ran the program all my column headings where already printed I was just adding another header line
can i post a pic of what i need it to look like?
Posted: Tue Oct 16, 2012 5:44 pm
by burger2227
You can post a link to a picture or upload a picture to Drop Box. I see you are already a member.
Posted: Tue Oct 16, 2012 6:10 pm
by JasonQuinn1992
https://www.dropbox.com/s/c12o7q3r3s2y0i6/ch5.jpg
this is what i need the output screen to look like..... as i said I already have the headings set.. I need a total line that gives me the sum of the "Price column
I tried switching the PRINT Detail to print using d1$, since that what i need to print and i keep getting an error
PrintDetail:
PRINT USING D1$; man$; Yr; Make$; Model$; Desc$; Price$ 'Print details
RETURN
Any idea why?
Posted: Wed Oct 17, 2012 1:54 am
by burger2227
It needs 6 variable symbol places in the template:
D1$ = "\ \ ## \ \ \ \ $ ###.##" 'only has 5
Since none of the text is missing use & for the string values:
D1$ = "& ## & & & $$###.##"
Double $$ so dollar sign stays at start of price value.
Trial and error until it looks close. I see you are using the numerical values instead of string. Whatever works.
Posted: Wed Oct 17, 2012 10:26 am
by JasonQuinn1992
Okay I believe I was able to get the Type Mismatch error to disappear.. I emailed a fellow student in my class andthey emailed to me how their process detail was set up so I fix it as shown below;
'Process Detail
ProcessDetail:
GOSUB ReadData
DO UNTIL Manufact$ = "END"
GOSUB CalculateTotal
GOSUB PrintDetail
GOSUB ReadData
LOOP
END
ReadData:
READ Manufact$, Yr, Make$, Model$, Desc$, Price
RETURN
PrintDetail:
PRINT USING D1$; "Manufact$; Yr; Make$; Model$; Desc$; Price"
RETURN
READ Manufact$, Yr, Make$, Model$, Desc$, Price
DATA BMR-R79, 49, FIAT, 500B, GILLETE RAZOR, $7.99
DATA HOTWELS-34, 57, CHEVY, NOMAD, 4/DR STATION WAGON, $12.95
DATA MATCHBX-878, 73, FORD, BRONC, 3/DR 4X4 RED SPARE WHL, $25.99
DATA MATCHBX-72, 69, BUIK, CENTY, YELLOW TAXI, $1.49
DATA BRM-R88, 34, BUGANT, TY575, RACER, BLACK $35.00
DATA MATCHBX-25, 80, LINCO, MRKIV, WHITE, LIMOUSINE, $14.99
DATA LESNEY-Y42, 82, CHEVY, MALBU, 4/DR GREEN PASSENGER, $1.99
DATA HASBRO-119, 75, AMC, GRMLN, 2/DR SENAN, YELLOW, $1.69
DATA TABY-6332, 71, TOYOT, CELIC, 2/DR SEDAN, BLUE, $2.99
DATA BMR-SY238, 36, ROLRY, SYLVC, 4/DR SEDAN, SILVER-GRAY, $60.00
DATA "END",0,0,0,0,0,0
RETURN
however I still get that pesky syntax error on the
READ Manufact$, Yr, Make$, Model$, Desc$, Price$ line
Posted: Wed Oct 17, 2012 7:30 pm
by burger2227
Go back and READ what I told you before! You keep doing the same mistakes over and over!
No dollar signs in DATA when using a number.
Where is the template? You quoted the PRINT USING variables. That makes a string value