2 votos

AppleScript: Bulto iTunes-y-movimiento por el trabajo

Aquí estoy de nuevo con otro iTunes AppleScript pregunta. Tengo un guión de trabajo en el que puede seleccionar un trabajo (varias iTunes "canciones"), y decirle que lo que para establecer el trabajo de metadatos como para que la selección. Usted también decirle donde el nombre de movimiento se inicia en el nombre de la canción, y se copia todo después de que la posición en el movimiento de la etiqueta, con exclusión de todos los números romanos. Es también, por supuesto, los números de los movimientos.

Aquí está el código para que:

tell application "iTunes"
    set sel to selection of front browser window
    if sel is {} then
        try
            display dialog "Nothing is selected…" buttons {"Quit"} with icon 0
        end try
        return
    end if

    set c to (count of sel)
    set songName to (get name of item 1 of sel)

    set workName to display dialog "Edit for Work name and then click OK." default answer songName --prompt for work name
    set movementLength to display dialog "Edit to everything except the movement name. Do not include the roman numeral if one is present. If an arabic numeral is present, include it." default answer songName --prompt for movement length


    repeat with i from 1 to c --set the movement numbers
        set thisTrack to item i of sel
        set songName to (get name of thisTrack)
        set work of thisTrack to text returned of workName
        set movement number of thisTrack to i
        set movement count of thisTrack to c
        set movement of thisTrack to my delRomNum(text ((length of text returned of movementLength) + 1) thru (length of songName) of songName as string) -- copy movement text from song name and delete roman numerals
    end repeat


end tell

on delRomNum(t) -- the perl command search and delete any roman numeral (must be a word followed by the period and a space character)
    do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t
end delRomNum

Usted puede ver mi post acerca de que el guión aquí: Buscar y reemplazar AppleScript para iTunes los Nombres de las pistas

De todos modos, que el guión tiene ahora no convertirse en lo suficientemente eficiente para mi uso (I proceso de un montón de clásicos de las pistas)! Usando el script de arriba, tengo que seleccionar cada trabajo, y el ajuste en consecuencia para el trabajo, y luego para el movimiento.

Lo que me gustaría ahora es crear un script que puede hacer todo el proceso para varias obras a la vez, digamos, un álbum entero.

Tendría que encontrar todas las pistas que contenía I. y establecerlo como el punto de partida para el guión que he descrito anteriormente, y también obtener la posición de que I. recorte y en consecuencia para el Trabajo y el Movimiento de las etiquetas para ese trabajo en particular - e.g todo antes de I. y el espacio anterior sería establecer como el trabajo, y todo lo que después sería establecer como el movimiento.

Puedo ver que esto es lo que tengo que hacer, pero estoy demasiado de un AppleScript noob para implementar realmente! Para mí de todos modos, el verdadero reto está en determinar si una cadena se encuentra dentro de otra cadena (por ejemplo, comprobar si I. está en el interior el nombre de la canción) y la búsqueda de su posición dentro de el nombre de la canción. Si yo sabía cómo hacer esas dos cosas podría escribir el resto de la secuencia de comandos!

Cualquier sugerencias/ideas, sería muy útil. Y espero que mi descripción tiene sentido. Gracias!

Nota: a pesar de que yo tengo la llave de la parte respondió, y se puede escribir el resto de la secuencia de comandos de mí mismo, voy a añadir una muestra de entrada/salida.

enter image description here

3voto

Baczek Puntos 150

Uso is in para comprobar si " i" en nombre de la canción, como este: if " I." is in someString .

Uso el offset comando para obtener su posición dentro de la canción el nombre


Aquí es un ejemplo

set songName to (get name of thisTrack)
if " I." is in songName then -- " I." is inside this song name
    set {theWork, theMovement} to my splitText(songName, " I.") -- split the string to get the Work and the Movement
end if


on splitText(t, theSearchString)
    set x to the offset of theSearchString in t
    set a to text 1 thru (x - 1) of t -- everything before theSearchString would be set as the work
    set b to text x thru -1 of t -- this part would be set as the movement
    return {a, b}
end splitText

1voto

willem.hill Puntos 116

Así que aquí está mi script completo, basado en la otra respuesta que se ha dado.

Sé que mi respuesta es probablemente enrevesada y no eficiente, pero funciona!

tell application "iTunes"
    set sel to selection of front browser window
    if sel is {} then
        try
            display dialog "Nothing is selected…" buttons {"Quit"} with icon 0
        end try
        return
    end if

    set theSearchString to text returned of (display dialog "Enter the characters between the work name and movement name, for the first movement. Include spaces:" default answer ": I. ")
    set c to (count of sel)
    set songName to (get name of item 1 of sel)
    set movementNumber to 0
    set movementOffset to 0

    set theSearchString_no_rn to my delRomNum(theSearchString)

    repeat with i from 1 to c --set the movement numbers
        set thisTrack to item i of sel
        set songName to (get name of thisTrack)
        if theSearchString is in songName then -- " I. " is inside this song name
            set movementOffset to the offset of theSearchString in songName
            set movementNumber to 0
        end if

        set theMovement to text (movementOffset + (length of theSearchString_no_rn)) thru -1 of songName -- this part would be set as the movement

        set theWork to text 1 thru (movementOffset - 1) of songName -- everything before theSearchString would be set as the work

        set movementNumber to movementNumber + 1
        set movement number of thisTrack to movementNumber
        set movement of thisTrack to my delRomNum(theMovement)
        set work of thisTrack to theWork

    end repeat


end tell

on delRomNum(t) -- the perl command search and delete any roman numeral (must be a word followed by the period and a space character)
    do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t
end delRomNum

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X