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

Variable in String

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
faust
•->
•->


Anmeldedatum: 25.02.2012
Beiträge: 15

BeitragVerfasst am: 25.02.2012 - 19:27    Titel: Variable in String Antworten mit Zitat

Ich habe einen String, z.B.

set str to "3*a+4*a^2"

Ist es auf einfache Art möglich, der Variablen a einen Wert zuzuweisen und für diesen dann den Wert des Ausdrucks im String zu bestimmen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 26.02.2012 - 19:25    Titel: Antworten mit Zitat

Wenn du statt der Variablen a auch schreiben kannst $a, dann ist es ganz einfach, sonst etwas komplizierter.

Probiere mal so:

Code:
set expr to "3*$a+4*$a^2"

set value to "a=13;"

do shell script value & "bc -i <<.. | tail -1
" & expr
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 26.02.2012 - 21:52    Titel: Antworten mit Zitat

woodpecker hat Folgendes geschrieben:
Wenn du statt der Variablen a auch schreiben kannst $a, dann ist es ganz einfach, sonst etwas komplizierter.

Aber nichts, was man in Code einsetzen sollte, der in Produktivsystemen verwendet wird.

Stell Dir nur mal vor, der böse Hacker gibt statt "a=13" ein "a=13;rm -rf;".
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 27.02.2012 - 00:09    Titel: Antworten mit Zitat

Skeeve hat Folgendes geschrieben:

Aber nichts, was man in Code einsetzen sollte, der in Produktivsystemen verwendet wird.

Stell Dir nur mal vor, der böse Hacker gibt statt "a=13" ein "a=13;rm -rf;".


Davon hat er nichts gesagt, dass die Daten eingegeben werden sollen, aber wenn es denn so sein soll, geht's natürlich z.B. auch so:


Code:
set expr to "3*$a+4*$a^2"
set value to "a=13;rm -rf;"
set cval to do shell script "expr  " & quoted form of value & " :  '\\(a=[0-9]*;\\)'  || echo : "
if (count of value) is equal to (count of cval) then
   do shell script value & "bc -i <<..  | tail -1
" & expr
else
   display dialog "Eingabefehler: " & value
end if


Gruß woodpecker
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 27.02.2012 - 05:47    Titel: Antworten mit Zitat

[quote="woodpecker"]
Skeeve hat Folgendes geschrieben:

Davon hat er nichts gesagt, dass die Daten eingegeben werden sollen, aber wenn es denn so sein soll, geht's natürlich z.B. auch so:


War auch nur ein Sicherheitshinweis.

Man muß übrigens nicht auf die shell ausweichen und "$" davor setzen:

Code:

set expr to "3*a+4*a^2"
set value to "13"
set run_expr to replace_all(expr, "a", value)
run script run_expr

to replace_all(str, old, new)
   set oastid to AppleScript's text item delimiters
   set AppleScript's text item delimiters to old
   set splitted to text items of str
   set AppleScript's text item delimiters to new
   set str to splitted as string
   set AppleScript's text item delimiters to oastid
   return str
end replace_all

_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 27.02.2012 - 10:32    Titel: Antworten mit Zitat

Skeeve hat Folgendes geschrieben:

Man muß übrigens nicht auf die shell ausweichen und "$" davor setzen:


Na super! Nach so was wie run script hatte ich auch zunächst gesucht. Ich wusste gar nicht, dass es das auch in Apple Script gibt. Das entspricht der interpret-Anweisung in REXX.

Aber dann ist Deine Lösung auch wieder einen Tick zu umständlich. Du musst den Wert der Variablen ja nicht vor Ausführung des Scripts ersetzen. Das kannst Du ja auch AppleScript überlassen:
Code:
set expr to "3*a+4*a^2"
set value to "3"
run script "set a to " & value & return & expr


Gruß woodpecker
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 27.02.2012 - 18:32    Titel: Antworten mit Zitat

woodpecker hat Folgendes geschrieben:
Aber dann ist Deine Lösung auch wieder einen Tick zu umständlich.

Da hast Du wahr. Aber schau mal, wann ich's schrub. Und zieh noch 'ne Stunde ab, hier gehen die Uhren falsch.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
faust
•->
•->


Anmeldedatum: 25.02.2012
Beiträge: 15

BeitragVerfasst am: 28.02.2012 - 19:08    Titel: Antworten mit Zitat

Super, herzlichen Dank euch beiden. Das funktioniert bestens.

Mir ist das noch ein bisschen zu hoch, werde versuchen, mich da rein zu knien und es auch zu verstehen.

Ich hätte natürlich noch eine Anschlussfrage: Mit zwei Variablen (oder mehr) geht das nicht mehr so «einfach», wenn der Ausdruck "3*a+4*b^2" ist?

Ich könnte den Ausdruck in einzeln Teile splitten, was mir aber nicht so elegant scheint.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 28.02.2012 - 20:57    Titel: Antworten mit Zitat

Das funktioniert genauso:


Code:
set expr to "3*a+4*b^2"
# diese Variablen können über Dialog eingelesen werden
set a to "3"
set b to "5"

set a to "set a to " & a
set b to "set b to " & b
run script a & return & b & return & expr


Der Trick besteht darin, dass Du ein Script zusammenbaust, welches Du zur Laufzeit mit run script übersetzen und ausführen kannst
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
faust
•->
•->


Anmeldedatum: 25.02.2012
Beiträge: 15

BeitragVerfasst am: 01.03.2012 - 11:30    Titel: Antworten mit Zitat

Herzlichen Dank. Dann bleibt noch die letzte Frage.

Wenn ich die a's und b's eine Schleife durchlaufen lassen möchte, so erhalte ich eine Fehlermeldung.

set expr to "3*a+4*b^2"

set aa to 0
set b to 5

repeat until aa = 9
set aa to aa + 1
set a to aa as string
set a to "set a to " & a
set b to "set b to " & b
run script a & return & b & return & expr
end repeat

Ohne das repeat funktionierts.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 01.03.2012 - 13:42    Titel: Antworten mit Zitat

Hallo faust,

um in solchen Fällen hinter Deinen Fehler zu kommen, ist es immer ratsam, sich einfach mal das Event-Protokoll anzusehen. Dann siehst Du genau, was das Problem ist und an welcher Stelle was schief geht.

In Deinem Fall ist es so, daß ab dem zweiten Durchlauf das b schon aus "set b to 5" besteht und dann aus "set b to 5 set b to ..."

So klappt das:
Code:
set expr to "3*a+4*b^2"

set a to 0
set b to 5
set ergebnisse to {}

repeat until a is 9
   set a to a + 1
   set va to "set a to " & a
   set vb to "set b to " & b
   set end of ergebnisse to ((run script va & return & vb & return & expr) as integer)
end repeat
return ergebnisse

_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
faust
•->
•->


Anmeldedatum: 25.02.2012
Beiträge: 15

BeitragVerfasst am: 01.03.2012 - 18:27    Titel: Antworten mit Zitat

Danke, blöder Fehler von mir, leicht peinlich. Confused
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
Seite 1 von 1

 
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