Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

variablen-namen per variable festlegen?
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 26.06.2006 - 09:59    Titel: Re: Wie wäre es hiermit Antworten mit Zitat

Skeeve hat Folgendes geschrieben:
Vorweg: Es ist eine dumme idee, den Benutzer willkürlich Varablennamen festlegen zu lassen.

hi, skeeve. das war auch nicht meine absicht. die variablennamen sollen nicht vom benutzer festgelegt werden.
nochmal ein praktisches beispiel (xcode):
ich habe eine interface erstellt, das 20 textfelder hat, und denen ich bereits bei der interface-erstellung sinnvolle namen vergeben habe. nun möchte ich, sofern ein feld editiert wird, den inhalt in der gleichnamigen variable auf den neuesten stand bringen. um das zu bewerkstelligen, muss ich in mehreren schritten vorgehen:
• zunächst muss ich 20 variablen anlegen und definieren.
• als nächstes muss ich ermitteln, welches feld editiert wurde. diese info liefert in der regel der handler mit der variablen theObject, aus dem ich den namen auslesen kann (name of theObject).
• dann muss ich 20 if-abfragen durchlaufen, um z.B. das feld blabla in der variablen blabla zu speichern:
if name of theObject = "blabla" then set blabla to content of textfield "blabla"

wie schön wäre es doch, dies in einem rutsch erledigen zu können.

also angenommen, wir hätten das problem mit dem gültigkeitsbereich des "run script" nicht, fänd ich's so doch viel galanter, aber leider funktioniert's ja nicht:

   on end editing theObject
      set ObjName to name of theObject
      set WinName to name of window of theObject
      savefieldcontent(ObjName)
   end end editing
   
   on savefieldcontent(ObjName)
      run script "set " & ObjName & " to content of text field \"ObjName\" of window \"WinName\""
   end savefieldcontent

_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 26.06.2006 - 11:29    Titel: Antworten mit Zitat

sorry, der handler müsste natürlich so aussehen:

   on savefieldcontent(ObjName)
      run script "set " & ObjName & " to content of text field \"" & ObjName & "\" of window \"" & WinName & "\""
   end savefieldcontent

_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 26.06.2006 - 13:49    Titel: Re: Wie wäre es hiermit Antworten mit Zitat

iScript hat Folgendes geschrieben:
hi, skeeve. das war auch nicht meine absicht. die variablennamen sollen nicht vom benutzer festgelegt werden.
nochmal ein praktisches beispiel (xcode): [...]

Okay... Das ist was anderes. Ich schlage vor, Du implementierst Dir selbst einen Hash (Perl Schnack).

AS bietet sowas nämlich nicht, wie ich nach langer Recherche festgestellt habe.

Aber AS kann ja selbst Objekte definieren und damit läßt sich das dann erledigen. Hier habe ich einen vielversprechenden Ansatz in 2 Teilen gefunden.

Im Prinzip ist das nur eine Liste, wenn Du die Liste aber so behandelst, daß nun jedes ungerade Element ein key und jedes gerade der Wert ist, dann haben wir es doch.

Ansonsten gibt es auch noch eine List & Record Extension(?) die Snow hier auch schon mal kurz erwähnt hatte. Frag mich nicht wo. Hatte ich über die Forensuche gefunden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 27.06.2006 - 11:53    Titel: Antworten mit Zitat

vielleicht so?:

global varholder
set varholder to {"Var1", "Hallo", "Var2", "BlaBla"}

-- Variable lesen
varGet("Var2") --> "BlaBla"

varAdd("Var3", "foo") -- Variable hinzufügen
varGet("Var3") --> "foo"

varSet("Var2", "Juhu") -- Variable ändern
varGet("Var2") --> "Juhu"

varholder --> {"Var1", "Hallo", "Var2", "Juhu", "Var3", "foo"}


on varGet(varName)
   repeat with i from 1 to the count of varholder
      if item i of varholder is varName then return (item (i + 1) of varholder)
   end repeat
end varGet

on varAdd(varName, newContent)
   set varholder to varholder & varName & newContent
end varAdd

on varSet(varName, newContent)
   repeat with i from 1 to the count of varholder
      if item i of varholder is varName then set (item (i + 1) of varholder) to newContent
   end repeat
end varSet


_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 27.06.2006 - 12:54    Titel: Antworten mit Zitat

iScript hat Folgendes geschrieben:
vielleicht so?:

Aber nur ganz vielleicht!

1. Die Keys würde ich sortiert abspeichern
2. Die Suche würde ich dann binär durchführen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ShooTerKo
•--->
•--->


Anmeldedatum: 21.03.2006
Beiträge: 221
Wohnort: Hamburg

BeitragVerfasst am: 27.06.2006 - 12:57    Titel: Antworten mit Zitat

Ich würde add und set gleichsetzen.
Wenn die Variable schon vorhanden ist, nur den Inhalt neu setzen. Sonst kann es mal passieren, dass ein Variablenname schon vorhanden ist. Surprised

CU
ShooTerKo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 27.06.2006 - 13:01    Titel: Antworten mit Zitat

ihr wollt mich fertigmachen!? Laughing
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
ShooTerKo
•--->
•--->


Anmeldedatum: 21.03.2006
Beiträge: 221
Wohnort: Hamburg

BeitragVerfasst am: 27.06.2006 - 13:44    Titel: Antworten mit Zitat

Zieh, H = : o ) L G I, zieh!
eins auf die Fresse Du schaffst es! eins auf die Fresse

CU
Schmiddl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 27.06.2006 - 23:58    Titel: Antworten mit Zitat

add + set gleichsetzen, das leuchtet mir ja noch ein und wär auch sinnvoll.

aber: "binär suchen"? ich bin ja schon froh, wenn ich morgens 'ne hose zum anziehen finde. hätte ich da binär bessere chancen? und keys sortiert abspeichern? wozu? damit's mir nicht so geht, wie mit der hose?

da muss ich echt passen und seh' auch nicht so den sinn drin, denn ich durchlaufe ja eh die ganze liste, bis treffer.
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 28.06.2006 - 00:20    Titel: Antworten mit Zitat

Binäre Suche hat den Aufwand O(ln(n)) gegenüber O(n) bei "normaler" Suche. Dazu muß aber die Liste sortiert sein.

Der Nachteil: O(ln(n)) hast Du auch beim Einfügen. Bei unsortierter Liste ist der Aufwand O(1).

Beispiel:

Du hast eine Liste mit den Schlüsseln A-Z und suchst das U. U ist der 21ste Buchstabe. Bei sortierter Liste mußt Du also 21 Vergleiche durchführen, bis Du U gefunden hast. Bei unsortierter Liste maximal 26 Vergleiche.

Bei binärer Suche bist Du nach spätestens 5 Vergleichen beim U.

Das funktioniert ungefähr so:

1. setze Index L auf das erste Element
2. setze Index R auf das letzte Element
3. Berechne die Mitte M=(L+R)/2
4. Vergleiche Key[M] mit gesuchtem Key.
a) Gleich -> Wir sind am Ziel
b) kleiner -> Setze L=M
c) größer -> Setze R=M
5. Mache mit 3 weiter.

Für das Beispiel mit A-Z
Code:

    L  M  R
1.  1 13 26  M < U
2. 13 19 26  S < U
3. 19 22 26  V > U
4. 19 20 22  T < U
5. 20 21 22  U = U


Natürlich fehlt hier noch die Randbedingung, wenn L=R. Dann ist der Schlüssel nämlich nicht vorhanden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 29.06.2006 - 12:09    Titel: Antworten mit Zitat

Skeeve hat Folgendes geschrieben:
Binäre Suche hat den Aufwand O(ln(n)) gegenüber O(n) bei "normaler" Suche. Dazu muß aber die Liste sortiert sein.

das thema ist auf jeden fall interessant, und ich hab wieder was dazugelernt, aber für diesen fall is mir das zu oversized. der mehrwert (geschwindigkeit), den ich mit binärer suche in diesem fall erhalten würde, wiegt den aufwand nicht auf (und der ist seeehr seeehr hoch, da ich ja nur ne ganz kleine leuchte bin). ausserdem will ich in diesem fall ja code sparen (weil ich faul bin). und den performance-gewinn durch binär-suche würde ich nie spüren. so feinfühlig (millisekunden) bin ich nicht.

aber, wie gesagt. in anderem zusammenhang -> sehr interessant. ich kann das sicher nochmal brauchen.

set und add hab ich zusammengefasst (add entfällt):

on varSet(varName, newContent)
   if varholder contains varName then
      repeat with i from 1 to the count of varholder
         if item i of varholder is varName then set (item (i + 1) of varholder) to newContent
      end repeat
   else
      set varholder to varholder & varName & newContent
   end if
end varSet

_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 29.06.2006 - 13:40    Titel: Antworten mit Zitat

Schau Dir mal an, was mit Deiner Implementation passiert, wenn Du als key "inhalt1" angibst, bei dieser Liste:

( "var1", "inhalt1", "var2", "inhalt2" )

Ich denke, der Werd wird "var2" sein.

Entweder Du wählst Schrittweite 2,

oder Du teilst den varHolder in 2 Listen, eine mit den Namen, eine mit den Inhalten, auf.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
till
•--->
•--->


Anmeldedatum: 21.04.2005
Beiträge: 187
Wohnort: q-town (R-P)

BeitragVerfasst am: 29.06.2006 - 13:57    Titel: Antworten mit Zitat

also mein lehrer hat immer gesagt wenn man dann das ganze im datenbereichvon 1000 werten betrachtet wäre binär schon recht sinnvoll
_________________
ein berühmter Philosoph (<-Ich) sagte einmal:
" es ist nicht das Problem was uns Kopfzerbrechen macht,
es ist der Kopf selbst, der sich erdrückt"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 29.06.2006 - 14:51    Titel: Antworten mit Zitat

till hat Folgendes geschrieben:
also mein lehrer hat immer gesagt wenn man dann das ganze im datenbereichvon 1000 werten betrachtet wäre binär schon recht sinnvoll

Deswegen würde ich das auch als Objekt implementieren. Dann kann es nämlich auch für andere Scripte verwendet werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 30.06.2006 - 01:37    Titel: Antworten mit Zitat

Skeeve hat Folgendes geschrieben:
Schau Dir mal an, was mit Deiner Implementation passiert, wenn Du

Es ist ja nicht so, dass ich den einwand nicht vorhergesehen hätte Embarassed.
hab das nur aus zeitmangel so hingeflotzt. ihr habt recht. soviel ist klar.
gut aufgepasst, jungs Wink
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X Alle Zeiten sind GMT + 2 Stunden
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter