AsTokens

Hi,

ich hab mal wieder eine Frage bzw. ich brauche Hilfe. Ich möchte Strings, die in einem bestimmten Feld einer Tabelle liegen bei Auswahl durch asTokens mit dem Separator ";" trennen und als Liste ausgeben lassen.
Das Feld und der Inhalt wird auch richtig gefunden, wenn ich jedoch AsTokens anwende, dann gibt der mir weder eine Ergebnisliste bzw. eine Liste als String raus noch gibt er NIL zurück..
Hier der Quellcode:

thema = av.getproject.finddoc("tabell2.dbf")
myVTab = thema.GetVTab

Feld = myVTab.FindField("dani")
derstring = myVTab.ReturnValueString(Feld, myVTab.GetSelection.GetNextSet(-1))
msgbox.info(derstring,"derstring")
if (derstring = NIL) then
msgbox.info("NÖ","nö")
else
ausgabe = derstring.asTokens(";")
msgbox.list(derstring.astokens(";"),"test","test")
end

newfile = Filename.Make("C:\IDdatatokens.txt")
newfileexists=File.Exists(newfile)


if (newfileexists = false) then
lf = LineFile.Make(newfile, #FILE_PERM_WRITE )

lf.WriteElt(ausgabe.asString)
lf.Close

else
lf = LineFile.Make(newfile,#FILE_PERM_MODIFY)
lf.gotoend
lf.WriteElt(ausgabe.asString)
lf.close
end


Vielleicht kann mir jemand von Euch sagen, wo hier mein Fehler liegt. Das Skript beachtet meinen Separator überhaupt nicht und gibt mir auch nichts zurück....

Danke schonmal,
dani
Hallo Dani,

in dem Teil

ausgabe = derstring.asTokens(";")
msgbox.list(derstring.astokens(";"),"test","test")
end

muss es heißen

ausgabe = derstring.asTokens(";")
msgbox.listAsString(derstring.astokens(";"),"test","test")
end

Zumindest siehst du dann was "asTokens" gemacht hat. Den Rest des Skrites hab ich mir aber noch net angeschaut.

Gruß von Maxilla
dankeschön!
merkt sich arcview diese Liste jetzt als Liste? weil ich möchte die Liste Eintrag für Eintrag durchgehen und überprüfen ob bestimmte Wörter oder Buchstabenfolgen in den jeweiligen Einträgen vorhanden sind...z.B. "h="..versuche das jetzt mit pattern, bin schon gespannt ob es funzt ;)
Wenn du nur bestimmte Buchstabenfolge suchst, würde doch auch "contains("xxx")" reichen ohne eine Liste (=Variable "ausgabe") zu erstellen.
Ja, "asTokens" erzeugt eine neue Liste, die bei dir "ausgabe" heißt.

Du kannst übrigens auch einfacher überprüfen, ob bestimmte Wörter oder Buchstabenfolgen vorhanden sind und zwar mit der Abfrage "contains".

Würde ungefähr so aussehen:

selBitmap = theVTab.getSelection

for each rec in theSet
if (theStrings.contains(theFindString))then
selBitMap.set(rec)
end
end[i][/i]
Oh, hat sich überschnitten... :-)
@Jürgen
mein Problem ist folgendes: ich habe in einer Spalte lauter Felder mit Strings, wobei die einzelnen Einträge im String durch ";" voneinander getrennt sind. Im String sind Attribute von Objekten, zum Beispiel Brückenhöhe, Brückenlast, Raststätte (1 oder 0) usw.
Wähle ich also einen Datensatz aus, muss ich automatisch abfragen, ob bestimmte Inhalte in diesem String drin sind (also ob es ein h= für brückenhöhe oder l= für brückenlast) und dann diese Angaben zusammen mit den IDs in eine extra Datei schreiben. Das mit den IDs und den Koordinaten hab ich alles schon gemacht, jetzt muss ich nur noch diese Strings auseinanderpfriemeln. In der Datei steht dann zum Beispiel:
123456 ; 895623 ; Point: 7.65356 45.4689 ; Point: 8.9456 55.123 ; h=3.5 ; l = 15
Kann ich diese Höhenangaben auch mit contains rausfinden?
Wir hatten eben die Idee den String erst mit asTokens auseinanderzunehmen und dann die Liste durchgehen zu lassen und alles, was gefunden wird, an die Datei anzuhängen..
Das muss ja eine gräuliche Tabelle ein. Aber leider hat man oft mit so etwas zu tun. Nun weiß ich nicht genau, wie dieses Feld aussieht. Wenn bei jedem Datensatz die selbe Anzahl von Semikolons ist, so wäre es ratsam, für die einzelnen Angaben neu Felder hinzuzufügen. Dann mit AsTokens die Liste erstellen und .get(0) in Feld1, get(1) in Feld 2 ...
Wenn nicht, AsTokens-Liste erstellen und die Einzelwerte mit contains("h=") prüfen und den Zahlenwert mit
Variable.(right(variable.count-3))
z.B. in ein neues Feld "Höhe" eintragen lassen. So hast du dann auch für das weitere Arbeiten mit der Tabelle Vorarbeit geleistet.
Sollte natürlich so heißen:

Variable.right(Variable.count-2)
Aber das kommt dabei raus, wenn man sowas beim Mittagessen macht.