AppleScript: iTunes funziona in movimento e in movimento

2

Eccomi di nuovo con un'altra domanda AppleScript di iTunes. Ho una sceneggiatura funzionante in cui selezioni un'opera (diversi "brani" di iTunes) e diciamo cosa impostare i metadati di lavoro come per quella selezione. Puoi anche dire dove inizia il nome del movimento nel nome del brano, e copia tutto ciò che si trova dopo quella posizione nel tag di movimento, escludendo tutti i numeri romani. Naturalmente segna anche i movimenti.

Ecco il codice per questo:

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

Puoi vedere il mio post su questo script qui: Trova -e-replace AppleScript per i nomi delle tracce di iTunes

In ogni caso, quello script non è diventato abbastanza efficiente per il mio utilizzo (elaboro un sacco di tracce classiche)! Usando lo script di cui sopra, devo selezionare ogni singolo lavoro e ritagliarlo di conseguenza per il lavoro, e poi per il movimento.

Ciò che vorrei creare ora è uno script che può eseguire l'intero processo su più opere contemporaneamente, ad esempio un intero album.

Dovrebbe trovare ogni traccia che contiene I. e impostarla come punto di partenza per lo script che ho delineato sopra, e anche ottenere la posizione di quel I. e tagliare di conseguenza per i tag Lavoro e Movimento per quel particolare lavoro - ad es. tutto prima di I. e lo spazio che lo precede verrebbe impostato come lavoro, e tutto quanto dopo sarebbe stato impostato come movimento.

Posso vedere che questo è quello che devo fare, ma sono troppo un noob AppleScript per implementarlo davvero! Per quanto mi riguarda, la vera sfida consiste nel determinare se una stringa si trova all'interno di un'altra stringa (ad esempio, verificare se I. è all'interno del nome del brano) e trovarne la posizione all'interno del nome del brano. Se sapessi come fare queste due cose, probabilmente potrei scrivere il resto della sceneggiatura!

Qualsiasi suggerimento / idea sarebbe molto utile. E spero che la mia descrizione abbia un senso. Grazie!

Nota: anche se ho ottenuto la risposta alla parte chiave, e posso scrivere il resto dello script da solo, aggiungerò un input / output di esempio.

    
posta willem.hill 02.11.2017 - 04:35
fonte

2 risposte

3

Utilizza is in per verificare se " I. " è all'interno del nome del brano, ad esempio: if " I." is in someString .

Utilizza il comando offset per ottenere la sua posizione all'interno del nome del brano

Ecco un esempio

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
    
risposta data 02.11.2017 - 07:43
fonte
1

Quindi ecco il mio script completo, basato sull'altra risposta che è stata data.

So che la mia risposta è molto probabilmente complicata e non efficiente, ma funziona!

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
    
risposta data 03.11.2017 - 19:14
fonte

Leggi altre domande sui tag