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

Interpret mit AppleScript

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


Anmeldedatum: 02.04.2006
Beiträge: 8

BeitragVerfasst am: 02.04.2006 - 21:49    Titel: Interpret mit AppleScript Antworten mit Zitat

Hab einmal gedacht, einen Interpreten mit AppleScript zu schreiben, ich hab also meine Programmmiersprache mal FScript genannt. Hier der vollständige Code des Interprets: http://mitglied.lycos.de/keman/main.scpt
Ich erkläre kurz die Grundlagen meiner einfachen Programmiersprache, damit mein Problem deutlicher wird:

Eine FScript-Datei muss *.format gespeichert werden. Mehrere Befehle werden durch Zeilenumbrüche getrennt. Der erste Befehl muss immer #<fscript> sein. Eine FScript-Datei muss mit dem Editor erstellt werden (Link oben)!

DISPL hello world

erzeugt eine MessageBox, in der hello world steht.

?SET? hallo%4

definiert eine Variable mit dem Index 4 und dem Wert hallo. Variablen haben keine Namen sondern nur einen Index, es gibt also Variable 1, Variable 2 etc. Die beiden Parameter hallo und 4 werden durch das %-Zeichen getrennt.

DISPL Die erste Variable ist &0001 und die fünfzehnte &0015

erzeugt eine MessageBox mit den Variablen mit dem Index 1 und 15.

Es gibt noch ziemlich viele weitere Befehle, die ich jetzt nicht erklären werde. Auf jeden Fall wäre es in meiner Programmiersprache praktisch, eine externe *.format-Datei von einer anderen *.format-Datei auszuführen. Deshalb hab ich diesen Befehl entwickelt:

?SUB? datei1.format

Sollte theoretisch die Datei datei1.format ausführen, die sich im home/FScript-Ordner des Users befinden sollte. Dies hab ich in AppleScript so gelöst:

else if command is "?SUB?" then
tell application "Finder"

set theStarter to "FScript:" & p1 & ""
--p1 ist der erste Parameter des Befehls ?SUB?
set thePath to the file theStarter in the home

set mpmp to "" & thePath & ""
set aber to read file mpmp

compile(mpmp, 2)

-- Der erste Parameter von compile() ist der FScript-Code, der ausgeführt werden sollte, der zweite ist total unwichtig.

end tell


Wie schon gesagt, sollte man sich vielleicht den ganzen Code anschauen, hier:

http://mitglied.lycos.de/keman/main.scpt

Kann mir da jemand helfen, wenn ich nämlich folgende FScript-Datei ausführen will, kommt immer compile() konnte nicht ausgeführt werden.

#<fscript>
?SUB? datei1.format

Die Datei datei1.format exisistiert tatsächlich. Aber wieso kommt immer eine Fehlermeldung? Ich verstehe das einfach nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hweber
•--->
•--->


Anmeldedatum: 01.02.2004
Beiträge: 397

BeitragVerfasst am: 02.04.2006 - 22:15    Titel: Antworten mit Zitat

hallo keman, bist du sicher, daß du eine frage an dieses APPLE_SCRIPT_FORUM stellen möchtest?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 03.04.2006 - 12:29    Titel: Verstehe den Sinn nicht Antworten mit Zitat

Hallo keman,

ich wollte Dir nur mitteilen, daß ich den Sinn nicht verstehe, den Du mit Deinem "Interpreten" bezweckst.

Wieso erstellst Du nicht ein konkretes Projekt? Wieso versuchst Du etwas umzusetzen, was scheinbar nur dem Selbstzweck dient — und obendrein noch wesentlich komplizierter zu benutzen und wesetnlich unflexibler als das Original ist?

Ich mein, keiner kauft sich vier Möbelroller mit je einem drangebastelten Elektromotor bei seinem Auto dazu, um das Auto dann auf diese zu stellen und dann mit Batteriestrom zu fahren...!?


Zu Deiner Frage: Erstmal würde ich mir einen anderen Namen für Deine Routine überlegen als compile. Den Befehl gibt es nämlich. Dann: Was für eine Fehlermeldung kommt denn? Deine eigene? "Script Error"? Dann ist es ein Problem, welches Du lösen mußt und welches Du nicht auf AppleScript schieben kannst. Schließlich legst Du die Auswahlbedingungen fest. Setze schon mal an beim "if command is" — SUB ist ja nicht der Befehl, sondern der Befehl enthält nur SUB.

Aber wie gesagt, ich würde das Projekt einstampfen und die Zeit sinnvoller nutzen. Lerne doch erstmal gut mit AppleScript umzugehen. Ich denke, Du versaust Dir Deinen Programmierstil total, wenn Du Dich in ein selbstgeschaffenes "Reich" katapultierst. Gibt nämlich bei dem Spaghetticode schon allein genug Verbesserungspotential.

Sorry, aber ich würde was Anderes machen.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
keman
•->
•->


Anmeldedatum: 02.04.2006
Beiträge: 8

BeitragVerfasst am: 03.04.2006 - 16:18    Titel: Antworten mit Zitat

Eure Antworten machen mich ein bisschen wütend. Das ganze Programm ist 1658 Zeilen lang!!!! Da muss ich irgendwelche komische Variablennamen erfinden. Die Programmiersprache FScript ist auch schon recht verbreitet, dank mir. Hier das einfachste Sub-FScript-Programm:

Code:
#<fscript>
?SUB? function.format


Jetzt sollte die Datei function.format interpretiert werden! Und das passiert auch. Er kommt zum Befehl ?SUB?. Und danach bis zu "compile()". Und dann kommt die Fehlermeldung:

Finder hat einen Fehler erhalten.
Compile konnte nicht ausgeführt werden.

Die Fehlermeldung stammt nicht von mir. Und bevor ihr sagt, ich kann nicht mit AppleScript umgehen, schaut euch den ganzen Code mal an. Und was habt ihr dagegen, dass ich das ins AppleScript-Forum poste??

Gruss

Keman
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
keman
•->
•->


Anmeldedatum: 02.04.2006
Beiträge: 8

BeitragVerfasst am: 03.04.2006 - 16:21    Titel: Antworten mit Zitat

Ach übrigens (man kann hier nicht editieren!!!): Die Routine compile gibt es nicht, sonst wäre sie vom Scripteditor blau gefärbt worden, sie wird aber grün gefärbt (liegt eben daran, dass sie zwei Parameter braucht). Und die Variable command sind die ersten fünf Zeichen des Befehls, also eben doch tatsächlich "?SUB?".
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hweber
•--->
•--->


Anmeldedatum: 01.02.2004
Beiträge: 397

BeitragVerfasst am: 03.04.2006 - 16:50    Titel: Antworten mit Zitat

hallo keman,
daß du bei den bisherigen antworten frostig bist, kann ich verstehen; andererseits, wenn du hier im forum herumblätterst, wirst du schnell herausfinden, daß deine anfrage schon etwas anders ist, als das was hier in der regel passiert. Ich glaube, die meißten hier - ich schließe mich mit ein - verstehen gar nicht, woran du arbeitest.
Manchmal hilft hier auch ein wenig geduld und dann findet sich doch noch jemand, der bei dir mit macht.

h
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
keman
•->
•->


Anmeldedatum: 02.04.2006
Beiträge: 8

BeitragVerfasst am: 03.04.2006 - 17:35    Titel: Antworten mit Zitat

Das Problem ist einfach, dass ich seit zwei Wochen an diesem Punkt stehen bleibe und keine Lösung finde. Ausserdem, was ist an meiner Anfrage so komisch?
_________________
Gruss

Keman
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hweber
•--->
•--->


Anmeldedatum: 01.02.2004
Beiträge: 397

BeitragVerfasst am: 03.04.2006 - 17:42    Titel: Antworten mit Zitat

mit folgendem kleinen script wird die ausgewählte datei mit der dazugehörigen application geöffnet, vielleicht hilft dir das weiter, denn - wie gesagt - ich verstehe nicht wirklich, was du da machst
Code:
set meine_datei to choose file
set pfad_zu_meiner_datei to POSIX path of meine_datei

do shell script "open " & pfad_zu_meiner_datei

h
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
till
•--->
•--->


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

BeitragVerfasst am: 04.04.2006 - 00:05    Titel: Antworten mit Zitat

1. ) was is das ? http://mitglied.lycos.de/keman/
2. ) lad die datei - http://mitglied.lycos.de/keman/main.scpt - mal als zip oder so hoch - wei mein safari zeigt mir mal wieder nur hiroglyphen an! und anders komm ich nid ran!
_________________
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
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 04.04.2006 - 11:03    Titel: Weiteres zu "FScript" Antworten mit Zitat

Erstmal zu Till: Wie wäre es, wenn Du dem Safari mal sagst, was er mit der Datei machen soll? Wenn Safari meint, daß .scpt eine Textdatei ist, womit er vollkommen recht hat übrigens, dann sage ihm halt, daß Safari dies als Datei speichern soll. Zur Not machst Du das gleiche mit Firefox, der holt die Datei direkt runter.

So, dann nochmal zu Keman. Du scheinst davon sehr überzeugt zu sein; von der Sache ansich und vom Konzept des Programms. Nun, ich bleibe dabei, ich erkenne den Sinn nicht.

Wenn Du wirklich eine einfache Scriptsprache neu schreiben willst, Programmiersprache ist es ja nicht, da grundlegende Dinge einfach nicht existieren (Stichwort Schleifenbildung, bestimmte Handler, viele Befehle, die man bräuchte), dann ist es meine Meinung, kommt man um einen leicht zu bedienenden Editor erstens nicht umher; also wird das ein XCode-Projekt und zweitens sollte dann doch auch die Syntax der Sprache einfachst gehalten sein -- und nicht Strukturen von Perl und C und Basic vermischen und ein abstraktes Denken voraussetzen (Stichwort: Variablenindex).

Du machst ja nichts anderes, als zu interpretieren. Wenn der Befehl gelesen wird, dann mache das... und "das" setzt Du wiederum mit normalen AppleScript-Befehlen um.


Ich habe mich mal erkundigt, ob FScript irgendjemandem irgendwo ein Begriff ist.

Dabei habe ich folgende, grundsätzlich ablehnende Kommentare gefunden:

Nun, das hier scheint ein Namensvetter zu sein:

http://www.fscript.org/

Auch das hier sieht für mich nach etwas Anderem aus:

http://fscript.sourceforge.net/fscript/page1.html#link0

Im Übrigen gibt es das auch für die DOSe, also haben sich auch andere Leute daran versucht:

http://www.gmdsoft.de/gmd/index.php?site=programs&nav=fscript

So, dann hast Du offenbar auch andere Foren mit Deinem Problem konfrontiert. Zu Deinen Aussagen hier

http://www.apfeltalk.de/forum/interpret-mit-applescript-t35819-2.html

kann und möchte ich Dir mal folgendes sagen:

Unter OS 9 beispielsweise konnte der Scripteditor nicht mehr als 32 K Code verpacken, weswegen solche Methoden wie do script oder load script nötig waren.

Aber ansonsten: Was soll bitteschön an 1.680 Codezeilen besonders sein? Mein Programm Mailmirdas, welches ich zur Zeit nicht weiterentwickle, wen es interessiert, hier zu bekommen:

http://software.wolle77.de

hat über 2.200 Zeilen. Und ich füge grundsätzlich keine Leerzeilen und masige Kommentare ein, so wie Du.
Also, Dein Code ist absolut nicht so lang, daß der Editor deshalb Probleme bekommt.

Und noch etwas: Bei mir wird compile blau eingefärbt! Deshalb habe ich Dir das auch geschrieben.


So, hier habe ich dann etwas zu Deinem FScript gefunden:

http://www.piranho.com/home/workshops/showworkshop.php?xid=5e159b561ed03eaedf0149839973ada4&cat1=4&cat2=1&id=3502


Naja, und da kann ich mich vom Kommentar von terra1, "Armseliges Halb-Basic" irgendwie sinngemäß anschließen.


Daher nochmal meine Frage: Was ist der Sinn von FScript? Damit kann doch keiner etwas lernen? Und wer soll sonst diesen Aufsatz benutzen?

Allein hier:
Code:

else if command is "DSKTP" then
if p1 is "" then
                  tell application "Finder"
                     set the desktop picture to choose file
                  end tell
               else if p1 is " " then
                  tell application "Finder"
                     set the desktop picture to choose file
                  end tell
               else
                  try
                     tell application "Finder"
                        set the desktop picture to p1
                     end tell
                  on error e
                     tell application "Finder"
                        set the desktop picture to choose file
                     end tell
                  end try
               end if
            


wird es mir anders. Was hältst Du davon, den Code eines Interpreters mal ein wenig intelligenter zu halten... Beispielsweise so:

Code:
else if command is "DSKTP" then
   if p1 is "" or p1 is " " then
      tell application "Finder" to set the desktop picture to choose file
   else
      try
         tell application "Finder" to set the desktop picture to p1
      on error
         tell application "Finder" to set the desktop picture to choose file
      end try
   end if


Das ist der gleiche Ausschnitt, zusammengefaßt. Dann aber habe ich direkt die Einwände, daß das grundsätzlich schlechter Programmierstil ist. Erstens:

Jemand, der Deiner Sprache eine ungültige Anweisung gibt, den Bildschirmhintergrund zu ändern, bekommt ohne Warnung einen Auswahldialog vorgeknallt. Er weiß gar nicht, warum- Und nur, weil Du einen error des Finders abfängst und dann einfach ohne Benutzerinteraktion ihm dann den Dialog vorsetzt. Was ist, wenn die Datei einen Fehler schmeißt?

Ein Interpreter sollte ja wohl wirklich nur strikt interpretieren und bei einem Error den Befehl mit Fehler angeben.

Dann fängst Du aber nicht mal den in e geloggten Fehler ab... Und was soll überhaupt das "" und " "? Möchtest Du damit verhindern, daß evtl. erfaßte Leerzeichen erkannt werden?

Wie wäre es mit einem generellen Such-Tausch von allen Zeichen, die nicht erlaubt sind zu "" und dann einer Prüfung auf ""?


Dann schreibst Du ja auch provozierend, daß wer behaupte, Du solltest erstmal AppleScript verstehen, sich den Code anschauen soll.

Das habe ich auch gemacht und kann Dir alleine hier:
Code:

               if (get character counting of nowLine) is "%" then
                  if type is 0 then
                     set type to 1
                     set counting to counting + 2
                  else if type is 1 then
                     set type to 2
                     set counting to counting + 2
                  else if type is 2 then
                     set type to 3
                     set counting to counting + 2
                  else if type is 3 then
                     set type to 4
                     set counting to counting + 2
                  else if type is 4 then
                     set type to 5
                     set counting to counting + 2
                  else if type is 5 then
                     set type to 6
                     set counting to counting + 2
                  else if type is 6 then
                     set type to 7
                     set counting to counting + 2
                  else if type is 7 then
                     set type to 8
                     set counting to counting + 2
                  else if type is 8 then
                     set type to 9
                     set counting to counting + 2
                  else if type is 9 then
                     set type to 10
                     set counting to counting + 2
                  else if type is 10 then
                     set type to 11
                     set counting to counting + 2
                  else if type is 11 then
                     set type to 12
                     set counting to counting + 2
                  else if type is 12 then
                     set type to 13
                     set counting to counting + 2
                  end if
               end if


sagen, daß nur dieser kleine peinliche Ausschnitt auch erstens schneller, kürzer und ressourcenschonender so zu lösen ist:

Code:
if (character counting of nowLine) is "%" then
   set type to type + 1
   set counting to counting + 2
end if


(Übrigens brauchst Du nicht bei jedem Befehl einen end if einbauen:

Code:
if (character counting of nowLine) is "%" then    set type to type + 1


...und von solchen Codeblasen strotzt der ganze Code. Da ist es kein Wunder, daß Du auf diese Anzahl von Zeilen kommst.



Also, ich bleibe dabei, je mehr ich darüber nachdenke, das ist grundsätzlich Murks, mir fallen immer mehr Ungereimtheiten ein und auf. Laß es sein, optimiere Deinen Stil ansich bzw. übe an anderen Projekten.

Ich werde zu dem Thema nichts Weiteres mehr sagen, aber für mich ist das komplette und unsinnige Zeitverschwendung.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
keman
•->
•->


Anmeldedatum: 02.04.2006
Beiträge: 8

BeitragVerfasst am: 04.04.2006 - 14:21    Titel: Antworten mit Zitat

Ihr habt recht, ich hab's aufgegeben. Hat jetzt nicht mit AppleScript zu tun, aber hab einen neuen Interpret begonnen zu schreiben, mit Java diesmal. Editor mit highlight, und keine Basic-Befehle wie in FScript. Man kann if-Abfragen erstellen, while/for-Schlaufen, Variablentypen, Arrays, Funktionen, Classes etc.
_________________
Gruss

Keman
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