Namensgebung

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
Moin Klaus,

theLegendFile = (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
Hallo Uwe,
danke 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
Hello again,

theTheme = 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
Hallo back,
(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
Was erzeugt folgende Msgbox?

For 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
' *** Variablendeklaration Punkte ***
th105 = "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
Hello again and again,

nun 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
Hallo Uwe,
genau 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