1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Verschachtelte plist-Dateien auslesen (property list)

Dieses Thema im Forum "AppleScript" wurde erstellt von Tekl, 23.10.09.

  1. Tekl

    Tekl Fairs Vortrefflicher

    Dabei seit:
    01.06.05
    Beiträge:
    4.622
    Momentan nutze ich folgende Funktion, um was aus einer Plist zu lesen. Doch wie bekomme ich es hin, dass ich auch tiefere Verschachtelungen lesen kann?

    Code:
    on getProperty(thePath, theProperty)
    	try
    		set thePath to POSIX path of thePath
    	end try
    	try
    		if thePath does not contain ".plist" then
    			set thePath to thePath & "/Contents/Info.plist"
    		end if
    		tell application "System Events"
    			set propList to property list file thePath
    			tell propList
    				get value of property list item theProperty
    			end tell
    		end tell
    	on error
    		return "0"
    	end try
    end getProperty
     

    Anhänge:

  2. Irgendein Held

    Irgendein Held Oberösterreichischer Brünerling

    Dabei seit:
    17.06.07
    Beiträge:
    714
    Hm, ich bin da immer recht faul und lese die entsprechenden Dateien ein und such mit 'nem regulaeren Ausdruck nach dem, was ich haben will.

    Ansonsten waere Rekursion noch ein Thema fuer dich.
     
  3. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Bitte nicht, denn das hat nichts mit Plist lesen zutun.

    Du holst Dir einfach jeweils den Eintrag mit dem passenden Namen.
    -whose Name sollte/wird funktionieren.

    Bedenke, dass Du immer eine Liste aka NSArray als Ergebnis geliefert bekommst.

    Viele Grüße
     
  4. Tekl

    Tekl Fairs Vortrefflicher

    Dabei seit:
    01.06.05
    Beiträge:
    4.622
    aber wenn ich whose name is "path" verwenden, bekomme ich ja mehr als nur ein Ergebnis, oder? Zudem möchte ich auch Werte ändern.
     
  5. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Ja genau, deshalb schrieb ich, dass Du eine Liste als Ergebnis bekommst.
    Du mußt Dich dann durch hangeln, z.B. mit einer Schleife.

    Du kannst einfach -set auf das property item anwenden.

    Viele Grüße
     
  6. Tekl

    Tekl Fairs Vortrefflicher

    Dabei seit:
    01.06.05
    Beiträge:
    4.622
    Danke, werde mich dann mal daran versuchen.
     
  7. Irgendein Held

    Irgendein Held Oberösterreichischer Brünerling

    Dabei seit:
    17.06.07
    Beiträge:
    714
    Ich benutz auch kein Applescript oder so ;)
     
  8. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Dann sollte man die Leute nicht in die Irre führen und falsche Informationen verbreiten ;)
     
  9. Irgendein Held

    Irgendein Held Oberösterreichischer Brünerling

    Dabei seit:
    17.06.07
    Beiträge:
    714
    Es ist auch falsch zu behaupten, dass seien falsche Informationen, weil moeglich ist es damit.
    Aber du hast es ihm ja jetzt erklaert. :)
     
  10. vcr80

    vcr80 Doppelter Melonenapfel

    Dabei seit:
    06.11.08
    Beiträge:
    3.352
    Was spricht gegen den Plist-Editor der bei XCode dabei ist?
     
  11. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Wenn er seine entwickelte Applikation öffnet, schließt usw. soll sicherlich nicht der Plist-Editor auf und zu gehen :D

    Er möchte sicherlich zu Laufzeit der Applikation Daten lesen, schreiben, löschen usw.

    Viele Grüße
     
  12. vcr80

    vcr80 Doppelter Melonenapfel

    Dabei seit:
    06.11.08
    Beiträge:
    3.352
    Achso! Darum gehts! Das wurde jez vom ersten post nicht so klar.
     
  13. Tekl

    Tekl Fairs Vortrefflicher

    Dabei seit:
    01.06.05
    Beiträge:
    4.622
    Wie im Screenshot zu sehen, möchte ich gerne Lexikon-Plugins automatisiert aktivieren und zwar nach der Installation, so dass der Anwender sich nicht fragen muss, ob da bei der Installation nicht was schiefging.
     
  14. sedna

    sedna Pomme Etrangle

    Dabei seit:
    22.10.08
    Beiträge:
    911
    Hallo!

    Hier mal 2 mögliche Wege am Beispiel von Safari.app

    Code:
    tell application "System Events"
    	set propList to property list file "/Applications/Safari.app/Contents/Info.plist"
    	
    	tell propList
    		get value of property list item 1 of property list item "CFBundleTypeExtensions" of property list item 2 of property list item "CFBundleDocumentTypes"
    	end tell
    end tell
    
    Code:
    tell application "System Events"
    	set propList to property list file "/Applications/Safari.app/Contents/Info.plist"
    	
    	get value of property list item 1 of property list item 1 of property list item 2 of property list item "CFBundleDocumentTypes" of propList
    	
    end tell
    Gruß
     
    Nathea gefällt das.
  15. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Es ist schon eine fehlführende Information, weil RegEx nichts mit der Struktur der Plists zu tun haben. Da hat little Pixel absolut Recht. Das ist auch unabhängig von der Sprache.
     
  16. Tekl

    Tekl Fairs Vortrefflicher

    Dabei seit:
    01.06.05
    Beiträge:
    4.622
    Danke sedna. So ähnlich hatte ich das auch versuchte, weiß aber nicht mehr was du jetzt anders gemacht hast. Der direkte Zugriff klappt damit.

    Ich will aber vorher noch prüfen, ob und wo ein Eintrag schon existiert. Folgender Versuch schlägt fehl:

    Code:
    tell application "System Events"
    	set propList to property list file ((POSIX path of (path to home folder) as string) & "/Library/Preferences/com.apple.Dictionary.plist")
    	
    	set dicts to (value of property list item "dictionaries" of property list item 1 of property list item "window settings" of propList)
    	
    	repeat with dict in dicts
    		log (item 2 of dict)
    	end repeat
    	
    end tell
    Es kommte die Meldung:
    Hätte Apple einen vernünftigen Installer, müsste ich mich mit dem Scheiß hier nicht rumschlagen. Bin echt gefrustet.

    Im Grunde will ich ein:

    get (property list item whose property list item "path" contains "XYZ") of property list item "dictionaries" of property list item 1 of property list item "window settings" of propList)

    oder so ähnlich.
     
  17. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Das würde nicht so einfach funktionieren ;)

    Anbei Deine von Seite 1 gezeigte Plist und das Skript um die Werte zu setzen.
    Du solltest Dir unbedingt aber ein paar Prüfungen verbauen.

    Code:
    (path to home folder) as string) & "/Library/Preferences/com.apple.Dictionary.plist"
    Nein nein...

    So ist das richtig:

    Code:
    path to preferences folder from user domain
    Viele Grüße
     

    Anhänge:

    Nathea gefällt das.
  18. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Was hat sich da jetzt ergeben? Hast Du keine Lust mehr?

    Viele Grüße
     
  19. Tekl

    Tekl Fairs Vortrefflicher

    Dabei seit:
    01.06.05
    Beiträge:
    4.622
    Komme gerade erst zum testen. Bislang klappt es nicht. Muss aber auch erst mal deinen Ansatz verstehen. Vielen Dank schon mal dafür.
     
  20. Tekl

    Tekl Fairs Vortrefflicher

    Dabei seit:
    01.06.05
    Beiträge:
    4.622
    Leider greift das Skript nicht tief genug, es gibt ja noch eine Zwischenstufe zwischen dictionariers und path (item 0, item 1 …). Aber irgendwie komme ich mit einem repeat nicht ran.
     

Diese Seite empfehlen