1 votos

AppleScript extrae antes del delimitador el resultado del shell script

Me gustaría extraer el nombre de una lista de texto.

Resultado de do shell shell comando:

set Clist to do shell command "ls ./"

Es:

John_01044445558_pass.jpg<br>
Jane_01044562738_visa.jpg<br>
Doe_01027381938_pass.jpg<br>
Joe_7485.jpg

Necesito John Jane Doe Joe de esa lista en este formato:

John, Jane, Doe, Joe

¿Cómo puedo conseguirlo?

Aquí está el script.

tell application "Finder"
set fullname to name of (selection as alias)
set Cdate to do shell script "date '+%Y.%m.%d'"
set AppleScript's text item delimiters to {"_"}
if fullname contains ".jpg" then
    set CnameNFD to first text item of fullname
    set Cmobile to second text item of fullname
    set Ccustomer to second text item of fullname
    set Ctemp to "/Volumes/homes/macbook/Save/"
    set Clink to "https://r.loyverse.com/dashboard/#/clients/database?page=0&limit=10&search="
    set Cname to ¬
        do shell script "echo " & (CnameNFD as text) & "|iconv -f UTF-8-MAC -t UTF-8"
    --Save    
    --      set Cppl to do shell script "Ctemp=" & Ctemp & " Cmobile=" & Cmobile & ";ls $Ctemp | grep $Cmobile | awk -F'_' '{print $1}' "
    set Cppl to do shell script "Ctemp=" & Ctemp & " Cmobile=" & Cmobile & ";ls $Ctemp | grep $Cmobile "
    set lsOutputAsList to ¬
        paragraphs of ¬
        Cppl
    set theNamesList to {}
    repeat with thisItem in lsOutputAsList
        copy first text item of thisItem ¬
            to the end of theNamesList
    end repeat
    set AppleScript's text item delimiters to ", "
    set theNames to theNamesList as text
    set AppleScript's text item delimiters to {""}
    do shell script "Cname=" & Cname & " Cmobile=" & Cmobile & " Ccustomer=" & Ccustomer & " theNames=" & theNames & "; echo \"'$theNames'\""

si no mostrar diálogo " ." botones {"Okay"} botón por defecto 1 end if end tell

Si despliego el diálogo theNames se muestra como esperaba. Pero si ejecuto con shell script echo theNames no muestra nada. Necesito usar la variable theNames para curl post.

1voto

user3439894 Puntos 5883

Necesito a John Jane Doe Joe de esa lista en este formato. John, Jane, Doe, Joe

¿Cómo puedo conseguirlo?

Lo siguiente ejemplo AppleScript código asume la salida de su do shell script comando es:

John_01044445558_pass.jpg
Jane_01044562738_visa.jpg
Doe_01027381938_pass.jpg
Joe_7485.jpg

Ejemplo AppleScript código :

set lsOutputAsList to ¬
    paragraphs of ¬
    "John_01044445558_pass.jpg
Jane_01044562738_visa.jpg
Doe_01027381938_pass.jpg
Joe_7485.jpg"

set theNamesList to {}

set {TID, AppleScript's text item delimiters} to ¬
    {AppleScript's text item delimiters, "_"}

repeat with thisItem in lsOutputAsList
    copy first text item of thisItem ¬
        to the end of theNamesList
end repeat

set AppleScript's text item delimiters to ", "
set theNames to theNamesList as text
set AppleScript's text item delimiters to TID

return theNames

Resultado: John, Jane, Doe, Joe


Lo que el ejemplo AppleScript código está haciendo:

set lsOutputAsList to ¬
    paragraphs of ¬

Convierte el salida de la ls comando ejecutado en un do shell script comando a un lista en lugar de retorno de carro ( CR o hexagonal 0D ) terminaron las líneas de texto . Esto se hace para poder fácilmente bucle a través de y manipular el salida devuelto.

Tenga en cuenta que se trata de un ejemplo y se entiende como un soporte de lugar para:

set Clist to paragraphs of (do shell command "ls ./")

Donde el actual do shell script comando devuelve el salida que se muestra en el PO, lo que significa que el do shell script comando como se muestra no es realmente el actual comando de shell . Véase mi comentario al OP, que se repite en el Notas: sección al final de esta respuesta.

set theNamesList to {}

Crea un objeto de la lista para almacenar el nombre parte de la nombres de archivo .

set {TID, AppleScript's text item delimiters} to ¬
    {AppleScript's text item delimiters, "_"}

Utiliza AppleScript's text item delimiters para crear un lista de elementos de texto del consiguiente nombres de archivo Es decir, coacciona, por ejemplo, "John_01044445558_pass.jpg" El contenido de thisItem in lsOutputAsList a {"John", "01044445558_pass.jpg"} en el repeat bucle .

repeat with thisItem in lsOutputAsList
    copy first text item of thisItem ¬
        to the end of theNamesList
end repeat

Para cada artículo en el lista , copie la primera artículo de texto Por ejemplo, "John" , por ejemplo, en {"John", "01044445558_pass.jpg"} hasta el final del theNamesList lista .

set AppleScript's text item delimiters to ", "

Establece un nuevo text item delimiter para coaccionar al theNamesList lista en un cadena de texto .

set theNames to theNamesList as text

Coacciona al theNamesList lista Por ejemplo, {"John", "Jane", "Doe", "Joe"} en un cadena de texto a la variable theNames Por ejemplo, "John, Jane, Doe, Joe" .

set AppleScript's text item delimiters to TID

Como buena práctica, restaura AppleScript's text item delimiters al original text item delimiter que por defecto es {""} . Aunque en algunos casos, la determinación de la text item delimiter antes de modificarlo, y restaurarlo después de modificarlo puede no ser programáticamente necesario en un caso de uso específico, sin embargo, me remito a "Como una buena práctica".

return theNames

A modo de demostración, devuelve el valor de theNames variable que en este ejemplo es: John, Jane, Doe, Joe


Notas:

Sólo una información... El $PWD de un do shell script comando es / y como tal no hay manera de que el variable Clist en set Clist to do shell command "ls ./" contendrá el salida que se muestra en el OP. Contendrá un listado de lo que hay en el root del, por ejemplo, Macintosh HD . En otras palabras, set Clist to paragraphs of (do shell command "ls ./") será: {"Applications", "Library", "System", "Users", "Volumes", "bin", "cores", "dev", "etc", "home", "opt", "private", "sbin", "tmp", "usr", "var"}

1voto

wch1zpink Puntos 11

Aquí hay otra AppleScript que le devolverá los nombres tal y como los necesita.

-- Choose The Folder That Contains  Files With The Underscores In
-- Which The Names Need To Be Extracted

activate
set sourceFolder to quoted form of (POSIX path of (choose folder))

set text item delimiters to ", "
set namesList to paragraphs of (do shell script "find " & sourceFolder & ¬
    " -name '*_*.jpg' -exec basename {} \\; | sed 's/_.*//'") as text
set text item delimiters to ""

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