3.5.2 Known Bugs


ARCSHAPE

When ARCSHAPE creates a polygon shapefile, polygon records containing islands are written improperly: polygon parts representing island rings are missing the starting point which is necessary to match the closing point. This will lead to strange results in ArcView when zooming closely into such polygons or cleaning them. Also, SHAPEARC will not close those rings. (This bug is not present in 3.5.1)

The following script, executable in ArcView, will "repair" polygon shapefiles created by ARCSHAPE:

' REP352.AVE - repairs polygon shapefiles created by the PC ARC/INFO
' 3.5.2 ARCSHAPE command (polygon island rings are not written with
' identical start and end points).  Shapefiles which do not have polygons
' with "islands" need not be processed using this script.

'**** get input and output shapefiles

t1 = "Repair Shapefile"
fnInput = FileDialog.Show("*.shp","Shapefiles",t1)
if (fnInput = nil) then return nil end
inFTab = FTab.Make(fnInput.AsString.AsSrcName)
if (inFTab.GetShapeClass.GetClassName <> "Polygon") then
   MsgBox.Error("Shapefile must be polygon.",t1)
   return nil
end
fnDefault = FileName.GetCWD.MakeTmp("shape","shp")
fnOutput  = FileDialog.Put( fnDefault,"*.shp","Output Shape File" )
if (fnOutput = nil) then exit end

'**** set up output shapefile

fnOutput.SetExtension("shp")
outFTab = FTab.MakeNew( fnOutput, POLYGON )
inFields = inFTab.GetFields
newFields = List.Make
for each f in inFields
   if (f.GetName <> "shape") then
      newFields.Add(f.Clone)
   end
end
outFTab.AddFields(newfields)

'**** do it!

nCount = 0
nRecs = inFTab.GetNumRecords
inSF  = inFTab.FindField("shape")
outSF = outFTab.FindField("shape")
for each r in inFTab
   nRecNew = outFTab.AddRecord
   for each inF in inFTab.GetFields
      fName = inF.GetName
      if (fName = "shape") then
         p1 = inFTab.ReturnValue(inSF,r)
         p2 = Polygon.Make(p1.AsPolyLine.AsList)
         outFTab.SetValue(outSF,nRecNew,p2)
      else
         outF = outFTab.FindField(fName)
         val = inFTab.ReturnValue(inF,r)
         outFTab.SetValue(outF,nRecNew,val)
      end
   end
   nCount = nCount + 1
   av.SetStatus((nCount / nRecs) * 100)
end
av.ClearStatus
av.ClearMsg
av.PurgeObjects
MsgBox.Info("Done.",t1)
return nil

TABLES/TABLESW: SORT

A SORT on multiple fields of mixed type will not work if the first sort field is numeric.

Workaround: The SML below works around this in TABLES by adding a temporary character field (XX_TEMPC), populating it with "x", and making that the first sort field.

&rem **** SORT.SML

&rem **** sort routine for TABLES for sorting mixed field types
&rem **** when the first sort field is numeric

&goto usage &if &eq "x%-1" "x"

&sv -19 XX_TEMPC
&sv -20
ADDITEM
%-19
1
C
%-20
%-20

MOVE 'x' to %-19
SORT %-19 %-1 %-2 %-3 %-4 %-5 %-6 %-7 %-8 %-9 %-10 %-11 %-12 %-13 %-14 %-15 %-16 %-17 %-18
DROPITEM %-19
Y

&return

&label usage
&type "Usage:  &r SORT [item...item]"
&return
NOTE: ESRI's current plans for Version 4.0 include dropping TABLES altogether and incorporating its functionality elsewhere (e.g. ARCPLOT). Hopefully the SORT command will also be implemented.


SML PROCESSOR

Local variables that are blank are filled with spaces after executing an ARC-level command:

&sv -1
&sv -2 #

&type "Before: x%-1x"
&type "Before: x%-2x"

IDENTITY LINECOV POLYCOV XX LINE

&type "After: x%-1x"
&type "After: x%-2x"
After executing IDENTITY, variable -2 will still contain "#" but -1 will contain 80 spaces. Similarly, local variables in a routine called by a module are filled with spaces:

TABLES tabtest.sml


tabtest.sml:

&type "x%-1x"
Variable -1 will contain 80 spaces.

Workaround: If a variable hasn't been used and a blank value is needed, initialize the variable:

&sv -1
DEFINE [outfile]
[item1]
1
C
%-1
Otherwise, wherever possible, assign a non-blank values:

&if &eq "x%-5" "x" &do
   &sv -10 #
&else
   &sv -10 %-5
&end
IDENTITY [cover1] [cover2] [temp] POLY %-10
INTERSECT [temp] [cover3] [outcover] POLY %-10

Return to PC ARC/INFO page