1 votos

Necesito que AppleScript ignore la línea extra en el archivo de entrada TAB

Estoy intentando leer un archivo delimitado por tabulaciones que fue exportado desde Filemaker Pro. Filemaker añade un retorno extra o un salto de línea al final de cada exportación. No puedo conseguir que mi AppleScript ignore esta línea extra. Soy nuevo en AppleScript y me vendría bien algo de ayuda.

Aquí está la sección de código donde traté de ignorar la línea con la declaración if -- no funciona.

-- read the file into a list based on paragraph delimiters (e.g. one path per line)
set fileList to (paragraphs of (read file theInputFile))
-- iterate through the file list
repeat with eachFilePath in fileList
    if eachFilePath != "" then -- there's something there...
        -- build the path to the current file
        set inFile to POSIX file (pathPrefix & eachFilePath as text)
        tell application "Finder"
            try
                if exists file inFile then
                    duplicate inFile to folder outFolder with replacing and exact copy
                end if
            on error
                --      something went wrong, so record the missed file
                copy eachFilePath to end of errorList
                log " missing file " & errorList
            end try
        end tell
    end if
end repeat

-- the code then continues to produce a text file with all the missing files.

Aquí hay un enlace para probar el archivo de entrada en Dropbox que debe ser capaz de descargar. https://www.dropbox.com/s/vsbpat76f9hqpk6/Testing%20Input.tab?dl=0

0voto

Mockman Puntos 16

El primer método introduce el texto en forma de párrafos en una lista y luego arroja el último elemento. El segundo método lee todo el texto y agarra todos los caracteres menos el último (es decir, el salto de línea extraño) y luego hace una lista de párrafos.

Actualización: Se ha añadido if then para comprobar si el archivo de entrada termina con una línea en blanco.

Método 1

use scripting additions
-- two test files, one ends with linefeed
set theInputFile to "MacHD:Users:username:fmempty.txt"
-- set theInputFile to "MacHD:Users:username:fmtext.txt"

set readFile to (get paragraphs of (read file theInputFile))
if last item of readFile is "" then
    set lastPara to -2
else
    set lastPara to -1
end if

set fileList to items 1 thru lastPara of readFile
repeat with eachFilePath in fileList
[…]

Método 2

use scripting additions
-- two test files, one ends with linefeed
set theInputFile to "MacHD:Users:username:fmempty.txt"
-- set theInputFile to "MacHD:Users:username:fmtext.txt"

set readFile to (read file theInputFile)
if last character of readFile is linefeed then
    set fileText to text 1 thru -2 of readFile
else
    set fileText to text of readFile
end if

set fileList to paragraphs of fileText
repeat with eachFilePath in fileList
[…]

NB el read forma parte de las adiciones estándar, de ahí la apertura use scripting additions línea.

0voto

wch1zpink Puntos 11

He descargado su "Testing Input.tab" en mi carpeta de descargas. Dicho esto, para evitar tener que utilizar bucles condicionales para comprobar si hay párrafos vacíos... Mi enfoque fue simplemente eliminar los párrafos vacíos desde el principio utilizando la función do shell script y establecer el fileList a ese resultado.

set theInputFile to POSIX path of ¬
    ((path to downloads folder as text) & "Testing Input.tab")

set fileList to paragraphs of ¬
    (do shell script "cat " & quoted form of theInputFile & " |sed '/^$/d'")

repeat with eachFilePath in fileList
    --process eachFilePath
    delay 0.1
end repeat

Opción 2: En mi opinión, la siguiente solución es probablemente la más fácil de entender y solucionar si es necesario. (Para aquellos que son nuevos en AppleScript )

set fileList to paragraphs of (read theInputFile)

if last item of fileList = "" then set fileList to reverse of ¬
    rest of reverse of paragraphs of (read theInputFile)

repeat with eachFilePath in fileList
    -- set inFile to POSIX file (pathPrefix & eachFilePath as text)
    tell application "Finder"

    end tell
end repeat

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