1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

AppleScript und Property Lists.

Dieses Thema im Forum "AppleScript" wurde erstellt von Mini-Leopard, 05.06.09.

  1. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Liebe AT-Gemeinde,

    ich arbeite gerade an einem sehr umfangreichen Projekt, das in AppleScript verfasst wird.
    Dabei spielen auch Property Lists eine große Rolle.

    Items werden hinzugefügt, verändert und sollen nun auch gelöscht werden.
    Nur leider bekomme ich es nicht hin, ein property list item zu löschen.

    Kann mir da einer weiter helfen, mir einen Kniff verraten, der einem das löschen von Property List Items ermöglicht??


    Vielen Dank für jeden Hinweis!
     
  2. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.904
    Code:
    do shell script "defaults delete [I][COLOR="Navy"]propertylist_domain key_to_delete[/COLOR][/I]"
     
  3. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Hallo,

    die Frage ist: Wird es eine 10.5 < x Version?

    Wenn ja, dann würde ich nur noch mit "System Events" arbeiten.

    http://www.macosxautomation.com/applescript/features/propertylists.html

    Warum?
    Weil so auch problemlos Verschachtelungen usw. gut zu bearbeiten sind.

    Ich würde Dir abraten Einträge zu löschen.
    Schreibe die Plist lieber immer wieder neu (mit ohne den besagten Key ;) ).

    Wenn nein, Rastafari shows you how to to.

    Viele Grüße
     
  4. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Bestimmt ist Dir schonmal aufgefallen, dass man Property Lists nur mit System Events bearbeiten kann.

    Die items müssen wirklich gelöscht werden.
    Ich will nicht wirklich die ganze Liste auslesen und dann eine neue erstellen.
    Ich bin ja auch darauf bedacht schnelle Programme zu schreiben.
    Und wenn man eine große Liste komplett neu anlegt, dann ist das sehr langsam.
    Ich manipuliere schon seit sehr langer Zeit P.-Listen.

    Daher kenne ich auch den Link schon.
    Allerdings steht da auch nur, wie man neue items erstellt, nicht wie man sie löscht.

    Was meinst Du mit Rastafari?!


    Cheers
     
    #4 Mini-Leopard, 05.06.09
    Zuletzt bearbeitet: 05.06.09
  5. Zettt

    Zettt Doppelter Melonenapfel

    Dabei seit:
    16.10.05
    Beiträge:
    3.374
    Rastafari ist ein Benutzer des Forums Apfeltalk. Der freundliche Herr hat dir, Mini-Leopard, IN DIESEM THREAD bereits geantwortet. Augen auf beim Eierkauf!
     
  6. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Lalala :D Hahah!
    Wie geil man! Ich bin echt wahnsinnig blind :)

    Dann hoffe ich mal, dass mir einer sagen kann, warum das nicht funktioniert, was mir da der Herr Rastafari geschrieben hatte...
    Denn das item, das ich löschen möchte liegt in einem dict.
    Also nochmal eine Instanz weiter unten.

    Kann mir da jemand was zu sagen?
     
  7. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Ohne mir sicher zu sein was Du konkret vor hast, aber so vermute ich, dass es vielleicht nicht ganz sinnig ist.

    In den Defaulst stehen in der Regel Eigenschaften, die das ganze Programm betreffen.
    Diese werden generell immer komplett geladen und als Eigenschaften in Deinem Modell gesetzt.
    Somit sind diese immer existent und müssen nicht neu gelesen werden. Daraus resultiert wieder, dass Du die Liste komplett zurückschreiben kannst.

    Ich glaube Du möchtest irgendwelche Daten sichern.
    Dafür gibt es aber Deinen ApplicationSupport Ordner.

    Sprechen wir da von ASS?

    Naja, bei 100 Elementen dauert das in AS nicht mal eine 1 Sekunde.

    Wie bereits erwähnt glaube ich, dass Du irgendwelche Text und Zahlen sichern möchtest.
    ... genau dafür gibt es in AS und ASS "write as list"

    Dokumentation und Library?

    Viele Grüße
     
  8. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Somit liegt die Vermutung nahe, dass es nicht von Dir stammt.
    Ein Dictionary kannst Du erst mit Leopard und AS erzeugen oder einer "richtigen" Applikation.

    Beschreibe doch mal näher den Hintergrund.
    Vielleicht gibt es einen besseren Weg Deine Daten zu sichern.

    Viele Grüße
     
  9. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.904
    Hier wird der textuelle Umgang mit plists kniffelig.
    Aber wer suchet, dem wird gefunden werden:
    Code:
    _my_plist_file="/my example/plist/to edit/foo.plist";
    _my_domain="${_my_plist_file%.plist}";
    _my_dict="the named dict i wish to act on";
    _my_key="the key that shalt be killed";
    
    defaults write "$_my_domain" "$_my_dict" "$(defaults read "$_my_domain" "$_my_dict" | grep -v '"'"$_my_key"'" = ' )";
     
    So. Und jetzt noch viel Spass beim maskieren aller darin enthaltenen DoubleQuotes für das "do shell script ...", in das du das ganze zu verpacken hast. Ich hasse AS. :)
     
  10. Mini-Leopard

    Mini-Leopard Rhode Island Greening

    Dabei seit:
    20.03.08
    Beiträge:
    476
    Zunächst mal an LittlePixel.

    Ja, die Liste stammt von mir, das Programm wird unter Leopard mit AS geschrieben.
    Mein Programm erstellt eine Property List, die eine Reihe verschiedener Items beinhaltet.
    Unter anderem auch ein Dictionary, das lediglich eine Liste von e-mail Adressen ist.
    Dieses Dic ("Adressen") wird mit beliebig vielen Adressen befüllt. Nun sollen auch Adressen aus dem Dic gelöscht werden können. Dafür muss ich nun aus dem Dic "Adressen" z.B. das Item "1" mit dem Wert ! "max@mustermann.de" gelöscht werden:

    Code:
    <key>Adressen</key>
    	<dict>
    		<key>1</key>
    		<string>jw@muster.de</string>
    		<key>2</key>
    		<string>sg@muster.com</string>
    		<key>3</key>
    		<string>aw@muster.de</string>
    		<key>5</key>
    		<string>apple@apple.de</string>
    		<key>6</key>
    		<string>pp@pp.pp</string>
    	</dict>
    
    Die Frage ist lediglich, wie
    Code:
    <key>3</key>
    		<string>aw@muster.de</string>
    löscht.
    Nein, die AS Dokumentation hat nicht geholfen :(


    Rastafari:

    Ich bin mir sicher, dass Dein weg geht.
    Ich möchte ehrlich gesagt ungern shell scripts anwenden.
    Weiß auch nicht warum. Vielleicht liegt es nur daran, dass ich da immer nicht so richtig durchblicke ;)
    Ich werde auf jeden Fall mal Deinen Code auseinander dröseln und versuchen ihn auf meinen Fall anzuwenden.


    Ich danke euch recht herzlich und hoffe weiterhin auf eine Variante ohne shell.
    Wünsche eine erholsame Nacht.
    CHEERS
     
    #10 Mini-Leopard, 06.06.09
    Zuletzt bearbeitet: 06.06.09
  11. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.904
    ...legt man vorteilhafterweise als Array an.
    Spart Platz, verarbeitet sich bei grossen Listen bedeutend schneller.
     
  12. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Code:
    ein Dictionary, das lediglich eine Liste von e-mail Adressen ist.
    Das ist soweit gut.

    ... und jetzt kommen wir zu Deinem Fehler.
    Ich meine solche Aussagen nicht böse. Wer mich kennt weiß das.
    Du weißt es einfach noch nicht.

    Da Du von Programm sprichst, sprechen wir also von ASS.
    Das Geheimnis lautet ASKDataSource.

    Eine Manipulation wird nie auf der Dateiebene vorgenommen.
    Immer in der Quelle, die die Daten verarbeitet. Dann schreibst Du einfach die Quelle zur Datei.

    Wenn Interesse an einem Beispielprojekt besteht, dann erstelle ich Dir eins.
    Bitte schreibe mich dann via E-Mail an.

    Ich setze aber gelesen Informationen voraus ;) D.h. bitte zu ASKDataSource lesen.

    Wenn Du dann das Verständnis hast, dann wirst Du sehen wie einfach das ist :)

    Viele Grüße
     

Diese Seite empfehlen