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

Vergleich von 2 Ortsangaben

Dieses Thema im Forum "OS X-Developer" wurde erstellt von plaetzchen, 04.10.06.

  1. plaetzchen

    plaetzchen Kaiserapfel

    Dabei seit:
    21.10.05
    Beiträge:
    1.729
    Hallo!

    Ich versuche den Ort von dateien mit einander zu vergleichen. Ich frage itunes und ich frage den Finder. Es sollte eigentlich immer die selbe liste rauskommen, wenn alles gleich ist.
    Wenn ich es so mache:

    set itunes to 0
    set finder to 0
    tell application "iTunes"
    copy location of every track of playlist "Einkäufe" to itunes
    end tell
    tell application "Finder"
    copy every item of folder "MUSIK:Einkäufe" to finder
    end tell

    Dann kriege ich von iTunes so etwas zurück:
    {alias "250GB:iTunes:iTunes Music:Sportfreunde Stiller:'54, '74, '90, 2006 - EP:01 '54, '74, '90, 2006.m4p", alias "250GB:iTunes:iTunes Music:3 Doors Down:Unbekanntes Album:Here Without You.m4v", alias "250GB:iTunes:iTunes Music:200 Sachen:Sekt zum Frühstück - Single:01 Sekt zum Frühstück.m4p"}

    und von Finder so etwas:

    {document file "01 '54, '74, '90, 2006.m4p" of folder "Einkäufe" of disk "MUSIK" of application "Finder", document file "01 A Horse with No Name.m4p" of folder "Einkäufe" of disk "MUSIK" of application "Finder"}

    Wie kann ich das machen das beide Programme die Orte gleich angeben? Sonst lohnt siche der Vergleich ja nicht.
     
  2. pete

    pete Gast

    Interessantes Problem.

    mit "every ..." erhält man meist eine Liste. Aber je nachdem, welches Programm man befragt, können die einzelnen Elemente der Liste unterschiedlichen Typs sein. In Deinem Beispiel sind das die beiden Typen "Alias" und "Dokument File".

    Man kann die abgefragten Werte von Listen nicht als Ganzes in einen anderen Typ wandeln. Aber man kann sie in einer repeat-Schleife ändern.

    Was willst Du eigentlich tun?

    ----
    edit

    Für den Finder/das System ist die feine Unterscheidung zwischen "Alias" und "Document File" sehr wahrscheinlich völlig egal, wenn die Listen mit Finder/System verglichen werden sollen.

    Beide verweisen auf Dateien und letztlich werden damit File IDs nachgewiesen/erzeugt. "Alias" kann allerdings nur für tatsächlich existierende Daten angewendet werden, während eine "file reference" auch für nicht existierende Daten etabliert werden kann. Ich hoffe, das hilft Dir weiter.

    Der Inhalt der Listen aus Deinen Beispielen ist nur eine "Darstellungsform" der eigentlichen Verweise. Ignoriere das einfach und vergleiche die Listen. Das wird schon klappen.
     
    #2 pete, 05.10.06
    Zuletzt von einem Moderator bearbeitet: 05.10.06
  3. plaetzchen

    plaetzchen Kaiserapfel

    Dabei seit:
    21.10.05
    Beiträge:
    1.729
    Nein das klappt ja eben nicht. Wenn ich das durch eine if Schleife laufen lasse, mit der Bedingung das er etwas machen soll, wenn die eine Liste anders als die andere ist, dann wird die Bedingung immer erfüllt.
    In OS 9 konnte man doch typen von Variablen umwandeln, geht das nicht auch?
     
  4. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    Hallo Plaetzchen,

    ja, klar kann man auch unter OS X Variablen 'verwandeln'. So in etwa könnte das aussehen:

    Code:
    tell application "iTunes"
    	tell playlist "Einkäufe"
    		set itunes_list to location of tracks
    	end tell
    end tell
    
    tell application "Finder"
    	set finder_list to (items of folder "MUSIK:Einkäufe")
    end tell
    repeat with fil in finder_list
    	if not ((fil as Unicode text as alias) is in itunes_list) then
    		beep
    		display dialog "fehlt: " & fil as Unicode text
    	end if
    end repeat
    Ich hoffe, das hilft dir?

    Grüße,

    D.
     
    plaetzchen gefällt das.
  5. plaetzchen

    plaetzchen Kaiserapfel

    Dabei seit:
    21.10.05
    Beiträge:
    1.729
    Ja das hilft extrem. Danke! Werde es bei Gelegheit mal austesten, hab leider grade wenig Zeit.
     
  6. plaetzchen

    plaetzchen Kaiserapfel

    Dabei seit:
    21.10.05
    Beiträge:
    1.729
    Also jetzt gibt es ein klenes Problem. Ich haabe das so niedergeschrieben:

    tell application "iTunes"
    tell playlist "Alle Einkäufe"
    set itunes_list to location of tracks
    end tell
    end tell
    tell application "Finder"
    set finder_list to (items of folder "MUSIK:Einkäufe")
    end tell
    repeat with fil in finder_list
    if not ((fil as Unicode text as alias) is in itunes_list) then
    tell application "iTunes"
    delete playlist "Alle Einkäufe"
    set thePlaylist to (make new playlist)
    set name of thePlaylist to "Alle Einkäufe"
    add "MUSIK:Einkäufe" to playlist "Alle Einkäufe"
    end tell
    end if
    end repeat

    Die Bedingung wird, wenn nicht grade immer wieder was einfügt, immer erfüllt. Ich würde es gerne so machen:

    tell application "iTunes"
    tell playlist "Alle Einkäufe"
    set itunes_list to location of tracks
    end tell
    end tell
    tell application "Finder"
    set finder_list to (items of folder "MUSIK:Einkäufe")
    end tell
    repeat with fil in finder_list
    if not ((fil as Unicode text as alias) is in itunes_list) then
    tell application "iTunes"
    add fil to playlist "Alle Einkäufe"
    end tell
    end if
    end repeat

    Aber so geht das nicht, dann gibt es immer ne Fehlermeldung. Geht das denn? Das wäre nämlich irgendwie effizienter bei 550 Files ;)
     
  7. plaetzchen

    plaetzchen Kaiserapfel

    Dabei seit:
    21.10.05
    Beiträge:
    1.729
    So jetzt aber, ich hab die Lösung gefunden, der Script braucht zwar ein wenig, aber egal:

    Code:
    tell application "iTunes"
    	tell playlist "Alle Einkäufe"
    		set itunes_list to location of tracks
    	end tell
    end tell
    tell application "Finder"
    	set finder_list to (items of folder "MUSIK:Einkäufe")
    end tell
    repeat with fil in finder_list
    	if not ((fil as Unicode text as alias) is in itunes_list) then
    		tell application "iTunes"
    			add (fil as Unicode text as alias) to playlist "Alle Einkäufe"
    		end tell
    	end if
    end repeat
    
    So. Wenn ich das jetzt noch mit nem "Hotfolder" zusammenbringen kann, wäre es natürlich noch besser, aber so reicht das auch erst ein mal. Danke für alle Helfer!
     

Diese Seite empfehlen