Applescript cambiando valor en plist

0

Tengo un script que pasa valores a una lista, funciona bien, pero me gustaría cambiar algunos de los valores sin eliminar todo lo demás. Solía tener un script para eso pero no lo encontré en absoluto.

Aquí está mi script que crea el valor

tell application "System Events"
    set the parent_dictionary to make new property list item with properties {kind:record}
    set the plistfile_path to "~/Desktop/MY_DATA.plist"
    set this_plistfile to ¬
        make new property list file with properties {contents:parent_dictionary, name:plistfile_path}
    make new property list item at end of property list items of contents of this_plistfile ¬
        with properties {kind:string, name:"thename", value:theName}
    make new property list item at end of property list items of contents of this_plistfile ¬
        with properties {kind:string, name:"creationDate", value:creationDate}
    make new property list item at end of property list items of contents of this_plistfile ¬
        with properties {kind:string, name:"serialNumber", value:serialNumber}
    make new property list item at end of property list items of contents of this_plistfile ¬
        with properties {kind:string, name:"Email", value:fullEmail}
    make new property list item at end of property list items of contents of this_plistfile ¬
        with properties {kind:string, name:"IPAddress", value:IPAddress}
end tell

aquí está lo que escribí para cambiar el valor, pero el problema es que el plist solo tendrá el nuevo valor y todas las demás propiedades se eliminarán

set theName to "demo"

tell application "System Events"
    set the parent_dictionary to make new property list item with properties {kind:record}
    set the plistfile_path to "~/Desktop/MY_DATA.plist"
    set this_plistfile to ¬
        make new property list file with properties {contents:parent_dictionary, name:plistfile_path}
    make new property list item at end of property list items of contents of this_plistfile ¬
        with properties {kind:string, name:"thename", value:theName}

end tell

¿Cómo puedo cambiar parte del valor sin eliminar los demás?

    
pregunta Kevin 26.05.2018 - 13:45

1 respuesta

1

En primer lugar, puede simplificar su secuencia de comandos inicial, la que se usa para crear el archivo de lista de propiedades, a esto:

    set plistR to {theName:"name", creationDate:"date", serialNumber:"serial #", fullEmail:"@", IPAddress:"1.2.3.4"}

    tell application "System Events"
        set plistf to make new property list file ¬
            with properties {name:"~/Desktop/MY_DATA.plist"}

        set plistf's value to plistR
    end tell

Luego, cambiar un valor es tan simple como cambiar un elemento en el registro plistR y configurar plistf's value para el nuevo plistR :

    set plistR2 to {theName:"name2", creationDate:"date", serialNumber:"serial #", fullEmail:"@", IPAddress:"1.2.3.4"}

    tell application "System Events"
        set plistf to the property list file "~/Desktop/MY_DATA.plist"
        set plistf's value to plistR2
    end tell

Si no quiere la molestia de escribir una declaración de registro completamente nueva (imagine que tenía, por ejemplo, 1000 artículos y solo necesitaba cambiar uno), puede ajustar un solo elemento de lista también como este:

    tell application "System Events"
        set plistf to property list file "~/Desktop/MY_DATA.plist"
        set the value of the property list item "theName" of plistf to "name3"
    end tell
    
respondido por el CJK 27.05.2018 - 03:49

Lea otras preguntas en las etiquetas