AppleScript: cómo buscar en una lista los elementos que contienen números

1

Estoy escribiendo un AppleScript que contiene una lista de elementos que se mezclan entre el texto y los números. Me gustaría filtrar esta lista solo para los elementos que contienen números.

No he podido resolver esto por mi cuenta y hasta ahora no he podido encontrar sugerencias útiles en línea.

Aquí está mi lista:

{"table", "s01e01", "nam", "aces", "linear", "20160430", "01", "textless", "3840x2160", "000011", "jpg"}

Y solo quiero que la búsqueda devuelva estos:

{"s01e01", "20160430", "01", "3840x2160", "000011"}

Por el bien de esta publicación, digamos que la lista está almacenada en myList.

Lo he intentado:

set numberItems to items of myList which contain integers

pero eso es un gran no ir!

    
pregunta mcar 03.03.2018 - 21:43

1 respuesta

1

Esto no parece ser una forma muy eficiente de hacerlo, pero creo que es un problema de AppleScript en lugar de mi falta de creatividad (podría estar equivocado):

    set mylist to {"table", "s01e01", "nam", "aces", "linear", "20160430", "01", "textless", "3840x2160", "000011", "jpg"}

    repeat with str in mylist
        set str to the contents of str

        repeat with i from 0 to 9
            if str contains i then
                set end of mylist to str
                exit repeat
            end if
        end repeat

        set mylist to the rest of mylist
    end repeat

    return mylist

Podrías hacerlo mucho más graciosamente usando un poco de script de shell:

    set mylist to {"table", "s01e01", "nam", "aces", "linear", "20160430", "01", "textless", "3840x2160", "000011", "jpg"}

    set the text item delimiters to space

    do shell script "grep -o '\S*\d\S*' <<< " & the quoted form of (mylist as text)

    return the paragraphs of the result 

EDITAR: hablé un poco demasiado pronto sobre mi (falta de creatividad), ya que se me ocurrió este método un poco más sofisticado para hacerlo con AppleScript. En teoría, también debería ser más rápido que el primer método:

    set mylist to {"table", "s01e01", "nam", "aces", "linear", "20160430", "01", "textless", "3840x2160", "000011", "jpg"}

    set the text item delimiters to {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

    repeat with str in mylist
        set str to the contents of str as text

        if str ≠ the text items of str as text then ¬
            set the end of mylist to str

        set mylist to the rest of mylist
    end repeat

    return mylist
    
respondido por el CJK 04.03.2018 - 00:46

Lea otras preguntas en las etiquetas