Guten Morgen,
ich habe gestern rumgepopelt und rumgepopelt - leider mein Problem nicht gelöst:
Ich habe Themen in einem Avenue-Script "nummeriert" = sie heißen Th105 bis
Th115. Nun möchte ich diesen Themen in einer Schleife Legendendateien (*.avl) zuweisen.
Wie bekomme ich die Namensgebung in der Schleife hin ?
For each n in 105..115
theTheme = theView.FindTheme("Th"+n.asstring)
-->:entstehen soll "Th105"
theLegend =theTheme.GetLegend
theLegendFile = (LPfad+n+".avl").AsFileName
--> enstehen soll "105.avl" wobei "LPfad" die Variable für den
--> Legendenpfad ist
theLegend.Load(theLegendFile,#LEGEND_LOADTYPE_ALL)
end
Vielen Dank im voraus
Klaus
ich habe gestern rumgepopelt und rumgepopelt - leider mein Problem nicht gelöst:
Ich habe Themen in einem Avenue-Script "nummeriert" = sie heißen Th105 bis
Th115. Nun möchte ich diesen Themen in einer Schleife Legendendateien (*.avl) zuweisen.
Wie bekomme ich die Namensgebung in der Schleife hin ?
For each n in 105..115
theTheme = theView.FindTheme("Th"+n.asstring)
-->:entstehen soll "Th105"
theLegend =theTheme.GetLegend
theLegendFile = (LPfad+n+".avl").AsFileName
--> enstehen soll "105.avl" wobei "LPfad" die Variable für den
--> Legendenpfad ist
theLegend.Load(theLegendFile,#LEGEND_LOADTYPE_ALL)
end
Vielen Dank im voraus
Klaus
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von uwelangehh am Mi., 23.02.2005 - 08:27
PermalinktheLegendFile = (LPfad+n+".avl").AsFileName
koennte heissen:
If (LPfad.Right(1) <> "/") Then
LPfad = LPfad + "/"
End
(LPfad+n.AsString+".avl").AsFileName
Trifft das deine Frage?
Gruss
Uwe
Gespeichert von Gast am Mi., 23.02.2005 - 08:50
Permalinkdanke für Deine Antwort. Ich will ein bißchen konkretisieren:
Mein Scriptschnipsel sieht so aus:
1.Thema = "th"
*** Also Variable deshalb, weil ich mit
***der Angabe in Zeile 3
*** "th"+n.AsString meineSchwierigkeiten hatte
2.For each n in 105..112
3.theTheme = theView.FindTheme(Thema+n.asstring).asFileName
*** hier steigt er schon aus. Meldung Objekt NIL kann asFileName nicht erkennen
4.theLegend =theTheme.GetLegend
5.theLegendFile = (LPfad+n.asString+".avl").AsFileName
6.theLegend.Load(theLegendFile,#LEGEND_LOADTYPE_ALL)
7.end
Nebenbei : die Langform läuft einwandfrei, dafür aber ehmt 50 mal ab
' *** Legende 301
theTheme = theView.FindTheme(th301)
theLegend =theTheme.GetLegend
theLegendFile = (LPfad+"gewaesser_f.avl").AsFileName
theLegend.Load(theLegendFile,#LEGEND_LOADTYPE_ALL)
Klaus
Gespeichert von uwelangehh am Mi., 23.02.2005 - 09:07
PermalinktheTheme = theView.FindTheme(Thema+n.asstring).asFileName
in der Regel bedeutet NIL bei Avenue, dass der Fehler vor dem PC sitzt :->
Die Zeile:
theTheme = theView.FindTheme(Thema+n.asstring).asFileName
muss heissen:
theTheme = theView.FindTheme("Thema"+n.asstring)
Falls dir die beiden Fehler nur in deinem Beitrag unterlaufen sind, dann schreib mal in der Zeile vorher:
Msgbox.Info("Thema"+n.asstring, "Test")
um den Dateinamen zu ueberpruefen.
Fehlt vielleicht das ".shp"?
Gruss
Uwe
Gespeichert von Gast am Mi., 23.02.2005 - 09:50
Permalink(I think I hear not right ? Was hast Du da wohl gemeint "Der Fehler sitzt vorm PC")
Ich hoffe, dies nützt jetzt mehr. Ich habe vorher als Variable
th100 = "105_Gewässer"
und nach DIESER Variablen such ich ja eigentlich
gebe ich ein
theTheme = theView.FindTheme(th105)
msgbox.info(thetheme.asstring,"")
nennt mir die MsgBox das richtige Thema (das auch so im View heißt)
Nun will ich ehmt die Variable durch einen for each laufen lassen
und zusammensetzten.
also etwa
for each n in 105..120
und den Zähler n als zweiten Teil des Variablennamens hernehmen.
Tja, und da sitzt der Fehler vorm PC und fehlert
Klaus
Gespeichert von uwelangehh am Mi., 23.02.2005 - 10:20
PermalinkFor each n in 105..112
strName = "Thema" + n.asstring
' Oder besser: strName = "Thema" + n.asstring + ".shp"
Msgbox.Info(strName, "Name des Themas")
theTheme = theView.FindTheme(strName)
If (theTheme = Nil) Then
Msgbox.Info("Nicht gefunden!", "Schade")
Else
Msgbox.Info("Gefunden!", "Na endlich")
End
End
Muss es nicht heissen:
strName = "Thema" + n.asstring + ".shp"
fragt dich
Uwe
Gespeichert von Gast am Mi., 23.02.2005 - 11:06
Permalinkth105 = "105_Gewässer"
th106 = "106_Gehölze"
th107 = "107_Gras-u.Krautflur"
th108 = "108_Moore, gewässerbed.Vegetation"
th109 = "109_Landwirtschaft"
th110 = "110_Kulturhistorische Elemente"
th111 = "111_Gewerbe"
th112 = "112_Siedlung"
' *************** Punkt-Shapes ****************
pThemeList = {}
pThemeList.Add(th105)
pThemeList.Add(th106)
pThemeList.Add(th107)
pThemeList.Add(th108)
pThemeList.Add(th109)
pThemeList.Add(th110)
pThemeList.Add(th111)
pThemeList.Add(th112)
RestP = "Reste_P.shp"
theView = av.FindDoc("Reste")
for each pTh in pThemeList
theSrcName = SrcName.Make(RV+RestP)
theTheme = Theme.Make(theSrcName)
theView.AddTheme(theTheme)
theTheme.SetName(pTh)
end
Das ist der erste Teil meines Scripts, der prima klappt. "theSrcName" ist vorher festgelegt, und aus diesem wiederum werden verschiedene
Themen mit den o.gen. Namen erzeugt.
Auf ähnlich "elegante" Weise möchte ich nun das Zuweisen der Legenden zu den obenerzeugten Themen lösen, wobei die Namen der
Legendendatei "L105.avl" usw sind. Bisher brauche ich für jedes Thema einen eigenen Lauf, der so aussieht (und das Script in die Länge zieht)
' *** Legende 105 laden
theTheme = theView.FindTheme(Th105)
theLegend =theTheme.GetLegend
theLegendFile = (LPfad+"gewaesser_p.avl").AsFileName
theLegend.Load(theLegendFile,#LEGEND_LOADTYPE_ALL)
Es muss doch UmGottswilln da eine Schleife möglich sein ?!?!?!?!?
(Ich höre ab hoit auf zu rauchen, wenns klappt - eigentlich habe ich damit schon gestern angefangen)
Klaus
Gespeichert von uwelangehh am Mi., 23.02.2005 - 11:38
Permalinknun scheint es mir klarer. Du moechtest nicht den konkreten Namen eines Themas (z. B. "105_gewaesser") in einer Schleife konstruieren, sondern den dazugehoerigen Variablennamen (th105). Das geht leider ueberhaupt nicht.
Jedoch scheint mir deine erste Schleifen-Konstruktion sinnvoll:
avlList = {"105_gewaesser.avl", "106_gehoelze.avl", ...}
intNummer = 0
If(avlList.Count <> pThemelist.Count) Then
Msgbox.Info("Hier stimmt was nicht!", "Hinweis")
Return Nil
End
for each strName in pThemeList
theTheme = theView.FindTheme(strName)
strLegende = avlList.Get(intNummer)
theLegend =theTheme.GetLegend
theLegendFile = (LPfad + strLegende).AsFileName
theLegend.Load(theLegendFile, #LEGEND_LOADTYPE_ALL)
intNummer = intNummer + 1
end
Wenn das nicht etwas weiter hilft, dann weiss ich auch nicht.
Gruss und toitoitoi
Uwe
Gespeichert von Gast am Mi., 23.02.2005 - 12:20
Permalinkgenau das ist der richtige Ansatz. Daß das mit dem zusammengesetzten VariablenNamen nicht geht .... woher soll man das wissen ?!?
Deine Lösung ist aber noch besser, weil dieser interne Vergleich der beiden Lisetn stattfindet !!!!
Herzlichen Dank
meine Lunge und mein Hirn werden Dir dankbar sein
Klaus