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

kurze Frage

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


Anmeldedatum: 30.03.2012
Beiträge: 1

BeitragVerfasst am: 30.03.2012 - 00:17    Titel: kurze Frage Antworten mit Zitat

ich habe vier variablen (alles zahlen, also Ints) und möchte die größten drei davon nehmen. wie mache ich das ohne riesige if-abfragen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


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

BeitragVerfasst am: 30.03.2012 - 09:31    Titel: Antworten mit Zitat

Du könntest die Zahlen untereinander in eine Textdatei schreiben. Mit
Code:
set x to do shell script "sort -n -r datei | head -3"

erhältst Du dann in x die gesuchten Zahlen (in jeder Zeile eine).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 447
Wohnort: Geldern

BeitragVerfasst am: 30.03.2012 - 16:20    Titel: Antworten mit Zitat

Hallo era, Hallo woodpecker,

So gerne ich Shellscripte benutze, in dem Fall würde ich davon strikt Abstand nehmen. Kostet in dem Fall ungeheuer viel Zeit (weiß ja nicht, was era da für ein Projekt hat).

Hier eine reine AppleScript-Umsetzung:

Code:
set {v1, v2, v3, v4} to {17, 11, 3, 77} # willkürliche Zuweisung, nur zur Hilfe
# Ich nehme an, Du hast also nun die willkürlichen Variablen. Schritt 1: In eine Liste packen:
set meinewerte to {v1, v2, v3, v4}
# Schritt 2 und Rest: Sortieren; nehmen der drei größten Werte:
set meinewerte to my quicksortneugepimpt(1, count items of meinewerte, meinewerte)
return items -3 thru -1 of meinewerte

on quicksortneugepimpt(Beginn, Ende, liste) -- Supermächtige Sortierroutine von C. A. R. Hoare, modernisiert und verständlichere Version vom 19.4.2011 (bisher immer 1:1 unverändert mit alt anmutender Syntax eingebaut) von Martin Wolter, martin_wolter@gmx.de
   considering case
      script listenspeicher
         property listefest : liste
      end script
      set LinkerWert to Beginn
      set RechterWert to Ende
      set StartWert to item ((Beginn + Ende) div 2) of liste
      repeat until RechterWert is less than or equal to LinkerWert
         repeat while item LinkerWert of listefest of listenspeicher is less than StartWert
            set LinkerWert to LinkerWert + 1
         end repeat
         repeat while item RechterWert of listefest of listenspeicher is greater than StartWert
            set RechterWert to RechterWert - 1
         end repeat
         if LinkerWert is less than or equal to RechterWert then
            set tempvar to item LinkerWert of listefest of listenspeicher
            set item LinkerWert of listefest of listenspeicher to item RechterWert of listefest of listenspeicher
            set item RechterWert of listefest of listenspeicher to tempvar
            set LinkerWert to LinkerWert + 1
            set RechterWert to RechterWert - 1
         end if
      end repeat
      if Beginn is less than RechterWert then tell me to quicksortneugepimpt(Beginn, RechterWert, listefest of listenspeicher)
      if Ende is greater than LinkerWert then tell me to quicksortneugepimpt(LinkerWert, Ende, listefest of listenspeicher)
   end considering
   return liste
end quicksortneugepimpt


Kern der Methode: Du kommst mit gar keiner if-Abfrage aus. Sondern Du sortierst Dir Deine 4 Variablenwerte einfach und nimmst dann die drei Größten – fertig!

Der Quicksort-Handler ist quasi ein Geschenk an die AS-Gemeinde, ich veröffentliche ihn hier erstmals. Er ist wesentlich performanter als die üblichen, die man da so kennt ;-)
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
woodpecker
•--->
•--->


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

BeitragVerfasst am: 30.03.2012 - 19:11    Titel: Antworten mit Zitat

Hallo Martin,
da hast Du natürlich recht. Zeitaufwendiger ist es allemal. Aber ich hatte die Anfrage so verstanden, dass es nur ein einmaliger Aufruf sein soll. In dem Fall würde es nicht ins Gewicht fallen.
Übrigens: Ich habe das mal getestet. Das Laufzeitverhältnis bei mir beträgt etwa 1:200.

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


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 31.03.2012 - 00:04    Titel: Antworten mit Zitat

Zu dem Thema gibt es bei macscripter was schönes:
http://macscripter.net/viewtopic.php?id=22911
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 02.04.2012 - 22:41    Titel: Re: kurze Frage Antworten mit Zitat

era hat Folgendes geschrieben:
ich habe vier variablen (alles zahlen, also Ints) und möchte die größten drei davon nehmen. wie mache ich das ohne riesige if-abfragen?

Wenn's nur 4 sind, sind das 3 if-abfragen:

Code:

set {v1, v2, v3, v4} to {17, 11, 3, 77}
set groeste3 to {}
set kleinste to v1
if kleinste < v2 then
   copy v2 to the end of groeste3
else
   copy kleinste to the end of groeste3
   set kleinste to v2
end if
if kleinste < v3 then
   copy v3 to the end of groeste3
else
   copy kleinste to the end of groeste3
   set kleinste to v3
end if
if kleinste < v4 then
   copy v4 to the end of groeste3
else
   copy kleinste to the end of groeste3
   set kleinste to v4
end if

groeste3

_________________
"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
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