There are 4 error messages with the script below. Can anybody find out how to solve them please? Everything seemed to match up in Notepad++.
The error messages:
[End sub] found without corresponding sub statement.
Found [] while searching for [next].
If without End If.
Sub/Function without End Sub/Function.
The script:
Include "mapbasic.def"
Include "icons.def"
Declare Sub Main
Declare Sub button_prompt
Sub main
Alter ButtonPad "Main"
Add Separator
Add PushButton
Icon MI_ICON_TRANSPORT_8
Calling button_prompt
HelpMsg "Use for checking protected riverine species\nCheck for riverine species in Stroud district"
show
End Sub
Sub button_prompt
Dim strUserGrid as string
Dim strUser100kSq,picname as string
dim strNorthings as string
dim strEastings as string
dim strAppref as string
Dim strRadius as string
Dim intLenUserGrid as integer
Dim intUserEast as integer
Dim intUserNorth as integer
Dim intMapWinId as integer
dim editablelayer, objtype as integer
dim obj_found,i_row_id,i,iii as integer
dim cosname as string
dim s_table As Alias
dim s_row as string
dim appPoint, appBuffer, distBuffer as object
dim numrows, numrows2 as integer
dim fileout, tableout, layername as string
dim dist, x2,y2 as float
dim win_id,layout_win,no_layers as integer
dim width_units as float
dim c_group, c_sci_name, c_eng_name, c_gridref, c_year, c_status, c_location, c_loc_detail as string
dim spCheck as logical
dim strTitle as string
Dim intAppref, aa, intstrChar as integer
Dim strChar, strLegalName as string
Dim i_app_type as integer
Dim int_buffer as float
'Check to see if map window is open
intMapWinId=frontwindow()
if intmapwinid = 0 then
Note "Program can only be run in a map window"
exit sub
end if
if windowinfo(intMapWinId,Win_Info_Type)<>WIN_MAPPER then
Note "Program can only be run in a map window"
exit sub
end if
'Delete all from cosmetic layer
delete from windowinfo(frontwindow(),win_info_table)
editablelayer=mapperinfo(frontwindow(),mapper_info_edit_layer)
do case editablelayer
case 0
case else
set map
layer 0 editable on
end case
Dialog
Title "Planning Check"
Position 200, 200 width 200 height 200
Control statictext
Position 20, 20
Title "Planning App. Ref:"
Control EditText
Position 100, 20
Into strAppref
Control StaticText
Position 20, 40
Title "Eastings:"
Control EditText
Position 100, 40
Into strEastings
Control statictext
Position 20, 60
Title "Northings:"
Control EditText
Position 100, 60
Into strNorthings
Control RadioGroup
Title "&Very large App;Specified Radius(m)"
Value 2
Into i_app_type
Control EditText
Position 100, 100
Into strRadius
Control OKButton
Position 60, 140
Control CancelButton
'strEastings="372990"
'strNorthings="229380"
'strAppref="a"
'Validate input
if CommandInfo (CMD_INFO_DLG_OK) Then
intLenUserGrid = Len(strEastings)
if intLenUserGrid <> 6 then
note "Eastings need 6 characters"
exit sub
end if
intLenUserGrid = Len(strNorthings)
if intLenUserGrid <> 6 then
note "Northings need 6 characters"
exit sub
end if
intUserEast=val(strEastings)
intUserNorth=val(strNorthings)
if intUserEast = 0 or intUserNorth = 0 then
note "You have not entered a valid grid reference"
exit sub
end if
'Check app ref
if strAppref="" then
note "You have not entered an application reference"
exit sub
else
'Remove illegal filename characters
intAppref=len(strAppref)
for aa=1 to intAppref
strChar=mid$(strAppref,aa,1)
intstrChar=asc(strChar)
if intstrChar < 48 then
strChar="_"
elseif intstrChar > 57 and intstrChar < 65 then
strChar="_"
elseif intstrChar >90 and intstrChar < 97 then
strChar="_"
elseif intstrChar > 122 then
strChar="_"
end if
strLegalName=strLegalName & strChar
next
end if
if i_app_type = 2 then
int_buffer = 5
else
int_buffer = val(strRadius) / 1000
end if
if int_buffer = 0 then
note "You have not entered a valid radius"
exit sub
end if
else
exit sub
end if
'Set location of output files, and delete old files if necessary
tableout=getfolderpath$(folder_mydocs) & "\" & strLegalName & "_planning_application.dbf"
if FileExists(tableout) then
kill tableout
end if
fileout=getfolderpath$(folder_mydocs) & "\" & strLegalName & "_planning_application_export.xls"
if FileExists(fileout) then
kill fileout
end if
'Create work table for building up output details
create table PlanAppCheck
(A char(60),
B char(180),
C char(200),
D char(40),
E char(35),
F char(30),
G char(250),
H char(254))
file tableout
type dbf
insert into PlanAppCheck
(A, D, E)
values ("Produced using data held at the", "GCER report for planning application:", strLegalName)
insert into PlanAppCheck
(A, D, E)
values ("Gloucestershire Centre for", "Search area: " + int_buffer*1000 + "m from:", "Eastings(" + strEastings +"), Northings(" + strNorthings + ")")
insert into PlanAppCheck
(A)
values ("Environmental Records")
insert into PlanAppCheck
(A)
values ("")
insert into PlanAppCheck
values ("Taxon Group",
"Latin Name",
"Common Name",
"Grid Reference",
"Year last recorded",
"Distance from app point(m)",
"Location",
"Status")
commit table PlanAppCheck
Set CoordSys Earth Projection 8, 79, "m" , -2, 49, 0.9996012717, 400000, -100000 Bounds (-6178818.52026, -12100120.7595) (6979076.21676, 1057773.97751)
Set Map Center (intUserEast,intUserNorth)
'choose style of buffer object
set style brush makebrush(51,yellow,-1)
set style pen makepen(2,2,yellow)
create point into variable appPoint(intUserEast,intUserNorth)
appBuffer=buffer(appPoint,20,int_buffer,"km")
cosname=windowinfo(frontwindow(),win_info_table)
set event processing off
'******************************************************************************* ************
'Check for protected species etc within buffer
select * from stroud_district_riverine_species
where obj within appBuffer
into specieslist
order by Group, Grid, Latin, Year desc
numrows=TableInfo(specieslist,TAB_INFO_NROWS)
if numrows=0 then
spCheck=FALSE
insert into PlanAppCheck (A) Values ("No Species Records Selected")
else
spCheck=TRUE
c_sci_name = ""
c_gridref = ""
for i=1 to (numrows)
select * from specieslist where RowID=i into results
if results.gridref = c_gridref
and results.sci_name = c_sci_name then
'ignore this record as it's effectively a duplicate (for the purposes of this program)
else
if c_sci_name = "" then
insert into PlanAppCheck
(A)
values ("Legally Protected Riverine Species - International")
end if
c_group = results.group
c_sci_name = results.sci_name
c_eng_name = results.eng_name
c_gridref = results.gridref
c_year = results.year
c_status = results.status
c_location = results.location
width_units = 0
numrows2 = 0
do until numrows2 > 0
width_units=width_units + 5
distBuffer= Buffer(appPoint, 60, width_units, "m")
select * from results
where obj within distBuffer
numrows2=SelectionInfo(SEL_INFO_NROWS)
loop
dist=width_units
insert into PlanAppCheck
(A, B, C, D, E, F, G, H)
values (c_taxongroup,
c_latin,
c_english,
c_grid,
c_year,
dist,
c_location,
c_status)
drop table results
end if
drop table specieslist
insert into PlanAppCheck
(A)
values ("")
commit table PlanAppCheck
'*******************************************************************************************
'Export data to file
export PlanAppCheck
into fileout
type "dbf"
overwrite
drop table PlanAppCheck
'*******************************************************************************************
'Create image file of planning app location
set event processing on
win_id=frontwindow()
if spCheck=TRUE then
set event processing off
map from all2 position (5,5) width 5 height 5
set map layer 0 editable on
cosname=windowinfo(frontwindow(),win_info_table)
create point (intUserEast,intUserNorth) symbol (34,red,12)
create object as buffer
from cosname
into table cosname
width (int_buffer) units "km"
resolution 60
set map center (intUserEast,intUserNorth)
if i_app_type=2 then
set map zoom 90000 units "cm"
end if
set event processing on
win_id=frontwindow()
set window win_id
position (0,0) Units "cm"
width 5 Units "cm"
height 5 Units "cm"
picname=getfolderpath$(folder_mydocs) & "\" & strLegalName & "_picture.jpg"
save Window win_id as picname type "JPEG"
width 9 Units "Cm"
height 9 units "Cm"
Copyright "Based on the Ordnance Survey Map. Licence No. 100046783"
remove map layer "all2"
end if
'*******************************************************************************************
'make original layer editable again
win_id=frontwindow()
set window win_id Max
do case editablelayer
case -1
set map layer editablelayer editable on
end case
end sub
Peter Horsbøll Møller
7,67321 silver badges26 bronze badges
1 Answer 1
You are missing a 'Next' for your For statement:
for i=1 to (numrows)
...
...
...
next 'this one is missing further down in the code!!
And you are missing an 'End If' for one of your If statements:
if results.gridref = c_gridref
and results.sci_name = c_sci_name then
'ignore this record as it's effectively a duplicate (for the purposes of this program)
else
if c_sci_name = "" then
insert into PlanAppCheck
(A)
values ("Legally Protected Riverine Species - International")
end if
...
...
...
End If 'This one is missing further down just before the missing Next keyword!!
answered Aug 31, 2015 at 7:11
-
Thank you Peter. It's much appreciated. I did get the tool working but then realised some of the text had to be changed.. Just before I finalised the tool; the work's server went down.. Many ThanksRob Curtis– Rob Curtis2015年09月02日 09:47:45 +00:00Commented Sep 2, 2015 at 9:47