in einem angelieferten Tabtext stehen Abkürzungen nach dem Muster "EWA" oder "WIF". Im Endprodukt soll die Bedeutung dieser Abkürzungen als Langtext erscheinen. Zunächst habe ich versucht, die Aufschlüsselung mit einem Record zu lösen: In typeRoom stehen die Definitionen für die erste Stelle der Abkürzung. An der zweiten Stelle können die gleichen Buchstaben auftreten, sie sagen aber etwas über die sanitäre Ausstattung aus. Daher wird die zweite Stelle in einer weiteren Liste aufgeschlüsselt. Da das prinzipiell nach dem gleichen Muster geschehen kann, lasse ich diesen Schritt hier weg. Der erste Kennbuchstabe der Abkürzung, also z.B. das E (von EWA) habe ich in die Variable theSpec1 geladen. Leider ist es mir nicht gelungen, damit den Eintrag E der Liste typeRoom anzusprechen.
Dann bin ich den Weg über eine Hilfsvariable gegangen: --- set typeRoom to {"Einzelzimmer", "Doppelzimmer", "Zweibettzimmer", "Dreibettzimmer", "Vierbettzimmer", "Ferienwohnung"} set keyTypeRoom to "EDZTVW" set theRoom to item (offset of theSpec1 in keyTypeRoom) of typeRoom --- Die Frage ist, ob mein erster Ansatz über Record nicht doch umsetzbar ist. Diese Lösung scheint mir nämlich eleganter zu sein.
das Problem ist, dass dieses Z (oder E, D, T, V, W) sich in der Variablen theSpec1 befindet. Ich wünschte mir, die Zeile würde so funktionieren: dann könnte ich, ganz gleich, welcher Kennbuchstabe gerade in der Variablen gelandet ist, immer den richtigen Langtext aus der Liste erhalten. Leider wird hier nicht auf den Inhalt von theSpec1 zugegriffen, sondern der Name der Variablen wird als Label interpretiert und natürlich in typeRoom nicht gefunden.
Dagegen darf die Zeile doch nur ausgeführt werden, wenn die Variable theSpec1 wirklich ein Z enthält. Um das herauszubekommen müsste der Inhalt der Variablen erst abgefragt werden: --- if theSpec1 = "Z" then set whatType to Z of typeRoom end if if theSpec1 = "Z" then set whatType to "Zweibettzimmer" end if set whatType to (content of theSpec1) of typeRoom -- oder set whatType to (value of theSpec1) of typeRoom --- Gruß, Goar
Und ja, jetzt verstehe ich, was Du meinst. Allerdings wird nicht der Name der Variablen als Label interpretiert, sondern der Inhalt der Variable ist ein String. Dadurch gibt es beim Ausführen die Fehlermeldung.
Leider kann die 'name property' (also der Kennbuchstabe) nicht als Variable verwendet werden. Die Variable kann auch nicht "unterwegs" zur 'label' konvertiert werden.
Was bleibt ist die Zwei-Listen-Lösung Deines ersten Postings, in welcher die Position des Kennbuchstabens mit 'offset of' festgestellt wird. Aber dazu wird die Scripting Addition "Standard Additions" eingesetzt (bremst die Ausführung).
Eine andere (schnellere?) Möglichkeit hast Du oben mit dem 'if'-Test angedeutet. Aber dieser sollte im 'if / else if'-Format benutzt werden. Dadurch wird die Schleife sofort verlassen, wenn die Werte übereinstimmen. Sonst – bei einzelnen 'if'-Vergleichen – werden alle Tests durchgeführt. Auch wenn die Übereinstimmung schon längst gefunden worden ist. --- if theSpec1 = "Z" then set whatType to "Zweibettzimmer" else if theSpec1 = "D" then set whatType to "Doppelzimmer" else if theSpec1 = "W" then set whatType to "Ferienwohnung" else if theSpec1 = "E" then set whatType to "Einzelzimmer" else if theSpec1 = "V" then set whatType to "Vierbettzimmer" end if --- Wie hier angedeutet, sollten die mutmasslich häufigsten Vorkommen in die ersten Tests gesetzt werden. Es zahlt sich speedmässig aus.