Hallo.
Ich habe folgende Erweiterung :
'Segment
'Create segmented polyline theme from continuous polyline theme
'Rons
'ArcView button
'4/5/2001
theView = av.GetActiveDoc
theActivethemeList = theView.GetActivethemes
if (theActivethemeList.Count = 0) then
MsgBox.Error("No active themes.","")
Exit
end
theTheme = theView.GetActiveThemes.Get(0)
theName = theTheme.getName
fnDefault = FileName.Make("c:\temp\").MakeTmp(theName,"shp")
fnNew = FileDialog.Put( fnDefault,"*.shp","New Theme" )
if (fnNew = nil) then exit end
fnNew.SetExtension("shp")
FTabOut = FTab.MakeNew( fnNew, POLYLINE )
if (theTheme.GetFTab.GetSelection.Count > 0) then
theFTabs = theTheme.GetFTab.GetSelection
nRecs = theFTabs.Count
else
theFTabs = theTheme.GetFTab
nRecs = theFTabs.GetNumRecords
end
FTabOut.AddFields({Field.Make("id", #FIELD_LONG, 8, 0)})
FTabOut.AddFields({Field.Make("name", #FIELD_CHAR, 50, 0)})
theCount = 0
nRecsAdded = 0
theID = -1
thisFtab = theTheme.GetFTab
shpFldIn = theTheme.GetFTab.FindField("shape")
shpFldOut = FTabOut.FindField("shape")
fldIDOut = FTabOut.FindField("id")
for each rec in theFTabs
theCount = theCount + 1
av.SetStatus(theCount * 100/ nRecs)
shp = thisFTab.ReturnValue(shpFldIn, rec)
px = 0
py = 0
For each part in shp.AsList
For each p in part
shpNew = Polyline.Make({{px@py, p.GetX@p.Gety}})
if (px > 0) then
nRecNew = FTabOut.AddRecord
FTabOut.SetValue(shpFldOut,nRecNew,shpNew)
FTabOut.SetValue(fldIDOut,nRecNew,theCount)
end
px = p.GetX
py = p.Gety
end
end
end
av.SetStatus(100)
newTheme = FTheme.Make( FTabOut )
theView.AddTheme( newTheme )
theName = newTheme.GetName
theExt=theName.asstring.right(4)
theName=theName.asstring.substitute(theExt,"")
newTheme.SetName (theName)
theView.GetWin.Activate
Jetzt meine Frage:
Ich habe eine beliebige Tabelle, wo ich nicht weiss wie die Felder bezeichnet worden sind.
Deshalb möchte ich alle Felder in die neue Tablle übertragen.
Bei diesem Script wurden ja einzelne Felder angesprochen und in die anderer Tabelle übertragen.
Ist das möglich alle Felder gleichzeitig anzusprechen ?
Ich habe folgende Erweiterung :
'Segment
'Create segmented polyline theme from continuous polyline theme
'Rons
'ArcView button
'4/5/2001
theView = av.GetActiveDoc
theActivethemeList = theView.GetActivethemes
if (theActivethemeList.Count = 0) then
MsgBox.Error("No active themes.","")
Exit
end
theTheme = theView.GetActiveThemes.Get(0)
theName = theTheme.getName
fnDefault = FileName.Make("c:\temp\").MakeTmp(theName,"shp")
fnNew = FileDialog.Put( fnDefault,"*.shp","New Theme" )
if (fnNew = nil) then exit end
fnNew.SetExtension("shp")
FTabOut = FTab.MakeNew( fnNew, POLYLINE )
if (theTheme.GetFTab.GetSelection.Count > 0) then
theFTabs = theTheme.GetFTab.GetSelection
nRecs = theFTabs.Count
else
theFTabs = theTheme.GetFTab
nRecs = theFTabs.GetNumRecords
end
FTabOut.AddFields({Field.Make("id", #FIELD_LONG, 8, 0)})
FTabOut.AddFields({Field.Make("name", #FIELD_CHAR, 50, 0)})
theCount = 0
nRecsAdded = 0
theID = -1
thisFtab = theTheme.GetFTab
shpFldIn = theTheme.GetFTab.FindField("shape")
shpFldOut = FTabOut.FindField("shape")
fldIDOut = FTabOut.FindField("id")
for each rec in theFTabs
theCount = theCount + 1
av.SetStatus(theCount * 100/ nRecs)
shp = thisFTab.ReturnValue(shpFldIn, rec)
px = 0
py = 0
For each part in shp.AsList
For each p in part
shpNew = Polyline.Make({{px@py, p.GetX@p.Gety}})
if (px > 0) then
nRecNew = FTabOut.AddRecord
FTabOut.SetValue(shpFldOut,nRecNew,shpNew)
FTabOut.SetValue(fldIDOut,nRecNew,theCount)
end
px = p.GetX
py = p.Gety
end
end
end
av.SetStatus(100)
newTheme = FTheme.Make( FTabOut )
theView.AddTheme( newTheme )
theName = newTheme.GetName
theExt=theName.asstring.right(4)
theName=theName.asstring.substitute(theExt,"")
newTheme.SetName (theName)
theView.GetWin.Activate
Jetzt meine Frage:
Ich habe eine beliebige Tabelle, wo ich nicht weiss wie die Felder bezeichnet worden sind.
Deshalb möchte ich alle Felder in die neue Tablle übertragen.
Bei diesem Script wurden ja einzelne Felder angesprochen und in die anderer Tabelle übertragen.
Ist das möglich alle Felder gleichzeitig anzusprechen ?
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Gast am Fr., 12.11.2004 - 12:26
PermalinkDu holst Dir mit getFields eine Liste der Felder der Ausgangstabelle und arbeitest diese Liste in einer FOR EACH Schleife ab. In der Schleife holst DU Dir zu jedem Feld die benötigten Parameter aus der Ausgangstabelle und erstellst das entsprechende Feld in der Zeiltabelle.
Fröhliches basteln!
Jörg