[GastForen Programmierung/Entwicklung AppleScript Abk. -> Langtext über Record oder Hilfsvariable

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Abk. -> Langtext über Record oder Hilfsvariable

Goar
Beiträge gesamt: 395

30. Jun 2004, 15:01
Beitrag # 1 von 4
Bewertung:
(1196 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Scripter,

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:
Code
set typeRoom to {E:"Einzelzimmer", D:"Doppelzimmer", Z:"Zweibettzimmer", D:"Dreibettzimmer", V:"Vierbettzimmer", W:"Ferienwohnung"} 

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"
Code
typeRoom enthält jetzt nur die Langtexte, keyTypeRoom die Kennbuchstaben in gleicher Sortierung. Der erste Kennbuchstabe ist auch hier in die Variable theSpec1 geladen. So greife ich über die Position des Kennbuchstaben in der Hilfsvariablen keyTypeRoom auf das Langtextelement der Liste typeRoom zu. 

  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.

Gruß, Goar
X

Abk. -> Langtext über Record oder Hilfsvariable

Hans Haesler
  
Beiträge gesamt: 5826

1. Jul 2004, 16:39
Beitrag # 2 von 4
Beitrag ID: #418859
Bewertung:
(1195 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

dies auf die Schnelle ausprobiert:
Code
set whatType to Z of typeRoom --> "Zweibettzimmer" 

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418858]

Abk. -> Langtext über Record oder Hilfsvariable

Goar
Beiträge gesamt: 395

1. Jul 2004, 21:49
Beitrag # 3 von 4
Beitrag ID: #418860
Bewertung:
(1195 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans (hoffentlich gut erholt),

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:
Code
set whatType to theSpec1 of typeRoom 

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
Code
set whatType to Z of typeRoom 

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
Code
Das würde auch bedeuten, dass für jeden denkbaren Fall (s.o.) eine solche Abfrage erforderlich wäre. Dann könnte ich aber auch gleich den Langtext hineinschreiben, da die Liste außer der Übersichtlichkeit keinen Nutzen mehr hätte. 

if theSpec1 = "Z" then
set whatType to "Zweibettzimmer"
end if
Code
Ist es jetzt deutlicher geworden? Vielleicht gibt es ja so etwas wie 

set whatType to (content of theSpec1) of typeRoom -- oder
set whatType to (value of theSpec1) of typeRoom
---
Gruß, Goar


als Antwort auf: [#418858]

Abk. -> Langtext über Record oder Hilfsvariable

Hans Haesler
  
Beiträge gesamt: 5826

1. Jul 2004, 23:56
Beitrag # 4 von 4
Beitrag ID: #418861
Bewertung:
(1195 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

ja, danke, wir haben uns sehr gut erholt. :-)

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 &#150; bei einzelnen 'if'-Vergleichen &#150; 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.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418858]
X