AppleScript - come cercare un elenco per gli elementi contenenti numeri

1

Sto scrivendo un AppleScript che contiene un elenco di elementi che sono mescolati tra testo e numeri. Mi piacerebbe filtrare questa lista solo agli oggetti contenenti numeri.

Non sono stato in grado di capirlo da solo e finora non sono stato in grado di trovare alcun suggerimento utile online.

Ecco la mia lista:

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

E voglio solo che la ricerca restituisca questi:

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

Per il bene di questo post, diciamo che l'elenco è memorizzato in myList.

Ho provato:

set numberItems to items of myList which contain integers

ma è un grande no!

    
posta mcar 03.03.2018 - 21:43
fonte

1 risposta

1

Questo non sembra un modo terribilmente efficiente per farlo, ma penso che sia un problema di AppleScript piuttosto che la mia mancanza di creatività (potrei sbagliarmi):

    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

Potresti farlo molto più facilmente usando un po 'di script di 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 

EDIT: ho parlato un po 'troppo presto della mia (mancanza di creatività), poiché mi è venuta in mente questo metodo leggermente sfaccettato per farlo con AppleScript. In teoria, dovrebbe essere più veloce del primo metodo:

    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
    
risposta data 04.03.2018 - 00:46
fonte

Leggi altre domande sui tag