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 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: 21.06.2006 - 14:33    Titel: variablen-namen per variable festlegen? Antworten mit Zitat

kurze zwischenfrage zur wm:

es geht sich um folgendes:
ist es eigentlich generell irgendwie möglich, den variablen-namen, in den ein wert gespeichert wird, ebenfalls aus einer anderen variablen heraus festzulegen?
beispiel: ich lese ein text-feld aus, das den namen "feld1" trägt, und möchte diesen inhalt in der variablen feld1 speichern.
jetzt müsste ich ich ja normalerweise die zielvariable explizit benennen, aber gibt es nicht einen weg, per handler diese aufgabe zu erledigen, ohne mit "if name of ... then set feld1 to ..." die zielvariable explizit per hand benennen zu müssen?
ich hätte soetwas schon häufiger brauchen können, denn das würde häufig enorm viele zeilen fleiss-code sparen.

vielleicht hat ja jemand eine idee!?
ich bräuchte also eine möglichkeit, mit einem string eine variable anzusprechen, die den namen des strings hat.

(hoffe, ich habe mich verständlich ausgedrückt)
_________________
- 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: 21.06.2006 - 14:55    Titel: Antworten mit Zitat

idee:
kann ich vielleicht einen as-befehl irgendwie (wie shell-befehle) per string zusammensetzen und dann als as-befehl ausführen lassen?
sowas (nur geträumt) z.b.:

set ObjName to name of theObject
set ascode to ("set " & ObjName & " to contents of text field \"" & ObjName & "\"")
do applescript ascode

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


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

BeitragVerfasst am: 21.06.2006 - 22:01    Titel: Antworten mit Zitat

set dename to "feld1"
set test to "xxx"
set txt to "set " & dename & " to " &" /" "& test& "/""

tell application "Script Editor"
make new document with properties {name:"iscripts varmaker"}
set text of document "iscripts varmaker" to txt

end tell


vlt so?
sry no time
_________________
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
till
•--->
•--->


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

BeitragVerfasst am: 22.06.2006 - 01:50    Titel: Antworten mit Zitat

Zitat:
-- so jetzt hatte ich zeit
-- ka was du willst aber mach das mal und dann
-- sag ob die richtung stimmt

set dename to "feld1" --testauslese
set test to 333 -- wert
set txt to "set " & dename & " to " & test -- befehl

tell application "Script Editor"
   make new document with properties {name:"iscripts var-maker"}
   set text of document "iscripts var-maker" to txt
   execute document "iscripts var-maker"
   -- beliebig mit invisible aber wem sag ich das
end tell

_________________
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
ShooTerKo
•--->
•--->


Anmeldedatum: 21.03.2006
Beiträge: 221
Wohnort: Hamburg

BeitragVerfasst am: 22.06.2006 - 10:10    Titel: Antworten mit Zitat

Einmal per run script und einmal per do shell script osascript:
Nur der Gültigkeitsbereich klappt nicht so recht Sad :
set varName to "foo"
set varValue to 34
set befehl to "set " & varName & " to " & varValue & return & "display dialog foo"
run script befehl

-- Bei do shell script ist keine Userinteraction erlaubt
set befehl to "set " & varName & " to " & varValue
do shell script "osascript -e " & quoted form of befehl


*just my 2 €Cents*

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


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 22.06.2006 - 11:32    Titel: Re: variablen-namen per variable festlegen? Antworten mit Zitat

Mal ganz unabhängig von Applescript... Wenn Du an so eine Frage kommst ist es eindeutig Zeit, Dein Programm zu überarbeiten!

Hier sind nämlich keine skalaren Variablen (um es im Perl jargon zu beschreiben, da mir AS noch nicht so liegt) mehr gefragt sondern Hashes (Perl-Schnack) oder assoziative Arrays.

Deine Variablen "feld1", "wasauchimmer" und "oderwasanderes" gehören dann als Schlüssel in so ein assoziatives Array.

Ich bin mir sicher gelesen zu haben, daß AS sowas kann. Frag mich aber bitte nicht nach der genauen Bezeichnung dafür. Hatte was mit Listen zu tun.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
till
•--->
•--->


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

BeitragVerfasst am: 22.06.2006 - 14:05    Titel: Antworten mit Zitat

also diese idee hatte ich bei dem sudoku script damals. was in der schule mit TP super klappte versagte bei AS komplett . also wirklich das thema array is bei as so ne sache... aber du (iscript) weist ja bescheid
_________________
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
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 22.06.2006 - 15:59    Titel: Antworten mit Zitat

supisache, vielen dank an die expertenrunde!

@shootercoo: die antwort ist mir eigentlich mal wieder viel zu einfach Wink. das ist aber genau das, was ich brauche! supi, danke! da war ich mit meinem traum ja gar nicht so weit weg. und warum bin ich da nicht selbst drauf gekommen? ("run script", ich idiot)

@skeeve: da hast du ja vielleicht recht, wenn ich deine antwort komplett verstehen würde. du meinst arrays, records, datensätze, oder wie auch immer man das nennen möchte {feld1:"wert1",feld2:"wert2"}, wenn ich dich recht verstehe. leider ist der zugriff auf solche datensätze nicht immer sehr konfortabel (das ist's, was till meinte)

@till: mit shootercoo's vorschlag kannst du ja aber auch solche records befüllen. das ist schon ziemlich cool. und du kannst mit der gleichen methode dann damit ja auch per variable auf die namen der records zugreifen.

also ich bin superglücklich mit euren tipps.
daaaaanke! das hat meinen as-horizont echt erweitert und eröffnet völlig neue möglichkeiten.
_________________
- 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: 22.06.2006 - 17:10    Titel: Antworten mit Zitat

@ShooTerKo: ach du schande: der gültigkeitsbereich! ja, das ist noch ein problem!
Rotz und Wasser heulen und nu? wie kann man's denn zurückgeben.
_________________
- 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: 22.06.2006 - 18:21    Titel: Antworten mit Zitat

ich werd noch bekloppt mit dem gültigkeitsbereich. ein "run script" scheint ja wirklich völlig abgenabelt zu laufen:

script datenpool
   property sammeln : {Eins:1}
end script

-- warum geht das hier
get datenpool's sammeln
log result

-- und warum das hier n i c h t !?
set befehl to "get datenpool's sammeln" & return & "log result"
display dialog befehl
run script befehl

kann man denn bei einem "run script" gar nix übergeben, egal in welche richtung?
_________________
- 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: 23.06.2006 - 11:01    Titel: Antworten mit Zitat

Bei der do shell script Variante wird zumindest ein return-Wert erreichbar. Cool
Also so z.B.:
set varName to "foo"
set varValue to 34
set befehl to "set " & varName & " to " & varValue & return & "return foo"
display dialog (do shell script "osascript -e " & quoted form of befehl)


Statt display dialog kannst du diesen Wert natürlcih auch in eine Variable packen...

Aber ob das alles so hilfreich ist... Nix kapier

CU
ShooTerKo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1955
Wohnort: Deiningen

BeitragVerfasst am: 23.06.2006 - 13:08    Titel: Antworten mit Zitat

Ich weiß zwar nicht genau, was beabsichtigt war - im Skriptobjekt datenpool - aber sowas geht z.B.:

script datenpool
    on run {x}
        set sammeln to {Eins:x}
        
return sammeln
    end run
end script

run script datenpool with parameters {6}


Was nicht machbar ist, ist innerhalb des Skriptobjekts eine Property zu benutzen, die dann bereits verwendete Werte aus vorhergehenden Aufrufen speichert. Das Skriptobjekt beginnt in dem Zeitpunkt zu existieren, in dem es aufgerufen wird. D.h. verwendete Properties weisen ihren Initialwert auf.
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
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: 23.06.2006 - 15:18    Titel: Antworten mit Zitat

ShooTerKo hat Folgendes geschrieben:
Statt display dialog kannst du diesen Wert natürlcih auch in eine Variable packen...
Aber ob das alles so hilfreich ist... Nix kapier


nee, isses natürlich nicht, denn ich möchte das ergebnis ("34"), dass ja schon vorher vorliegt (varValue) in die variable foo speichern, ohne selbst den namen angeben zu müssen, denn der name der foo-variable soll sich ja aus der variablen varName ergeben.
"nach dem shellscript" ist "vor dem shellscript" Sad

@snow: das script-objekt datenpool hatte ich nur konstruiert, da run script befehl innerhalb des auszuführenden "befehls" keine variablen annahm (als "nicht definiert" abwies). das ist eben auch der fall, wenn sich die property auf gleicher ebene gefindet (also in keinem unterscript). ich hatte gehofft, das es so funktioniert, da ich sie dann namentlich mit "datenpool's ..." ansprechen kann, und der "run script"-befehl dann weiss, wo er suchen muss.
_________________
- 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: 23.06.2006 - 16:12    Titel: Antworten mit Zitat

Nochmal zu Veranschaulichung des Problems:

set varName to "foo"
set varValue to 34

run script "set " & varName & " to " & varValue & return & "display dialog foo"
-- foo gibt's also!

display dialog foo -- liefert fehler: die variable "foo" ist nicht definiert


die variable "foo" scheint nur während der laufzeit des "run script"-befehls zu leben!? wie kann ich sie ins aktuelle script rüberretten?
_________________
- 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: 23.06.2006 - 16:35    Titel: Wie wäre es hiermit Antworten mit Zitat

Vorweg: Es ist eine dumme idee, den Benutzer willkürlich Varablennamen festlegen zu lassen. Von daher ist es besser, diese vorher zu definieren!

Von daher würde ich das also lösen, indem ich zunächst mal in einer Unterroutine die Namen wie folgt überprüfe:
Code:
on eine_referenz_zu(name)
   if name = "foo" then return a reference to foo
   if name = "bar" then return a reference to bar
   if name = "baz" then return a reference to baz
end eine_referenz_zu

Entsprechend sollte man natürlich noch fehler abfangen, was ich mir hier jetzt mangels AS Kenntnissen spare.

Das Setzen geschieht nun so:
Code:
global foo
global bar
global baz

set foo to "nüx"
set bar to "nüx"
set baz to "nüx"


set n to "foo"
set v to "okay"

set my_var to eine_referenz_zu(n)
set contents of my_var to v

display dialog "foo: " & foo & return & "bar: " & bar & return & "baz: " & baz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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 1, 2, 3  Weiter
Seite 1 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