1 votos

Cómo pasar una variable de AppleScript para script de Perl?

Tengo un script en Perl que hace algunos transformación del texto en un archivo dado.

Ahora me gustaría llamar a este script desde un AppleScript que a su vez podía ejecutar desde el menú de secuencia de comandos para ejecutar el script de Perl en un conjunto de archivos con elegir la carpeta de comandos. Mi script en Perl que inicia de esta manera:

open my $in, '<', 'myfile.txt' or die "No input: $!";
open my $out, '>', 'myfile-modified.txt';

Y, a continuación, hace un montón de búsqueda y reemplazo y lo que no.

Me gustaría de alguna manera llamar a esta secuencia de comandos de AppleScript y procesar varios archivos. El AppleScript debe verse más o menos así:

set myFolder to choose folder with prompt "Choose a folder:"
tell application "Finder"
    try
        set myFiles to (every file in entire contents of myFolder whose name ends with ".txt") as alias list
    on error
        try
            set myFiles to ((every file in entire contents of myFolder whose name ends with ".txt") as alias) as list
        on error
            set myFiles to {}
            display dialog "No files in folder."
        end try
    end try
end tell

¿Cómo puedo ejecutar el script de Perl de AppleScript mientras pasaba myFiles como una variable (la secuencia de comandos perl) y la función de bucle a través de ellos? Supongo que tengo que hacer una do shell script comando, pero no sé cómo pasar de las variables.

También no sé si es mejor pasar los archivos como una lista de archivos en perl o de alguna manera puesto que en una repetición de un bucle dentro de AppleScript?

1voto

Matt B Puntos 41

La longitud máxima de una línea de comandos es 2**18 bytes:

$ getconf ARG_MAX
262144

De modo que, por ejemplo, esto se traduce en un error:

read "/usr/share/dict/web2" for 270000
do shell script "printf %s " & quoted form of result

Si la entrada es lo suficientemente corto, puede pasar a perl como parte de la línea de comandos:

read "/usr/share/dict/web2" for 260000
do shell script "printf %s\\\\n " & quoted form of result & "|perl -pe'$_=uc'"

De lo contrario, puede utilizar un archivo temporal:

set input to read "/usr/share/dict/web2" for 270000
set f to (system attribute "TMPDIR") & "my.tempfile"
set fd to open for access f with write permission
set eof fd to 0
write input to fd as «class utf8»
close access fd
do shell script "perl -pe'$_=uc' " & f & ";rm " & f

La codificación de texto predeterminada es todavía una codificación como MacRoman o MacJapanese, por lo que la adición de as «class utf8» a la write comando conserva caracteres no-ASCII, aunque no es necesario en el ejemplo anterior.

En su caso también se podría hacer algo como esto:

quoted form of POSIX path of (choose folder)
do shell script "find " & result & " -name \\*.txt|perl -pe'$_=uc'"

quoted form of escapa de texto de conchas, de modo que se sustituye ' con '\'' y rodea texto con comillas simples.

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