• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

AppleScript und Property Lists.

Mini-Leopard

Rhode Island Greening
Registriert
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!
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
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
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Hallo,

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

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

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
 
Zuletzt bearbeitet:

Zettt

Doppelter Melonenapfel
Registriert
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!
 

Mini-Leopard

Rhode Island Greening
Registriert
20.03.08
Beiträge
476
Rastafari ist ein Benutzer des Forums Apfeltalk. Der freundliche Herr hat dir, Mini-Leopard, IN DIESEM THREAD bereits geantwortet. Augen auf beim Eierkauf!

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?
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
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.

ch will nicht wirklich die ganze Liste auslesen und dann eine neue erstellen.
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.

ich arbeite gerade an einem sehr umfangreichen Projekt, das in AppleScript verfasst wird.
Sprechen wir da von ASS?

Ich bin ja auch darauf bedacht schnelle Programme zu schreiben.
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"

Allerdings steht da auch nur, wie man neue items erstellt, nicht wie man sie löscht.
Dokumentation und Library?

Viele Grüße
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Denn das item, das ich löschen möchte liegt in einem dict.
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
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
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?
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. :)
 

Mini-Leopard

Rhode Island Greening
Registriert
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 ! "[email protected]" gelöscht werden:

Code:
<key>Adressen</key>
	<dict>
		<key>1</key>
		<string>[email protected]</string>
		<key>2</key>
		<string>[email protected]</string>
		<key>3</key>
		<string>[email protected]</string>
		<key>5</key>
		<string>[email protected]</string>
		<key>6</key>
		<string>[email protected]</string>
	</dict>

Die Frage ist lediglich, wie
Code:
<key>3</key>
		<string>[email protected]</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
 
Zuletzt bearbeitet:

LittlePixel

Strauwalds neue Goldparmäne
Registriert
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.

Nein, die AS Dokumentation hat nicht geholfen
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