1 votes

Besoin d'un AppleScript pour ignorer une ligne supplémentaire dans un fichier d'entrée TAB

J'essaie de lire un fichier délimité par des tabulations qui a été exporté de Filemaker Pro. Filemaker ajoute un retour ou un saut de ligne supplémentaire à la fin de chaque exportation. Je n'arrive pas à faire en sorte que mon AppleScript ignore cette ligne supplémentaire. Je suis novice en AppleScript et j'ai besoin d'aide.

Voici la section du code où j'ai essayé d'ignorer la ligne avec l'instruction if -- cela ne fonctionne pas.

-- 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.

Voici un lien vers le fichier d'entrée des tests sur Dropbox que vous devriez pouvoir télécharger. https://www.dropbox.com/s/vsbpat76f9hqpk6/Testing%20Input.tab?dl=0

0voto

Mockman Points 847

La première méthode aspire le texte sous forme de paragraphes dans une liste, puis supprime le dernier élément. La seconde méthode lit l'ensemble du texte et saisit tous les caractères sauf le dernier (c'est-à-dire le saut de ligne superflu), puis établit une liste de paragraphes.

Mise à jour : Ajout de if then pour tester si le fichier d'entrée se termine par une ligne vide.

Méthode 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éthode 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 le read fait partie des ajouts standard, d'où l'ouverture de la page d'accueil. use scripting additions ligne.

0voto

wch1zpink Points 6067

J'ai téléchargé votre "Testing Input.tab" dans mon dossier de téléchargements. Cela dit, pour éviter d'avoir à utiliser des boucles conditionnelles pour vérifier la présence de paragraphes vides... Mon approche a été de simplement supprimer les paragraphes vides dès le départ en utilisant la fonction do shell script et définir le fileList à ce résultat.

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

Option 2 : À mon avis, la solution suivante est probablement la plus facile à comprendre et à dépanner si nécessaire (pour ceux qui sont novices en matière de 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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X