1 votes

Applescript pour comparer deux listes de domaines et éliminer les doublons

J'ai essayé de le faire avec Automator et je l'ai trouvé... insuffisant. J'ai essayé de chercher des solutions partout ailleurs, mais mes recherches me conduisent toujours à Applescript comme étant la seule réponse possible.

J'ai besoin d'automatiser cette tâche quotidienne qui prend beaucoup de temps et je n'ai aucune idée de la façon de le faire en Applescript puisque je n'ai commencé à "apprendre" à son sujet que depuis deux jours.

J'espère que quelqu'un ici pourra m'aider.

Voici ce que je veux faire :

  1. J'ai une liste principale de domaines.
  2. Comparez la liste secondaire des domaines que je crée tous les jours et supprimez les doublons (par rapport à la liste principale).
  3. Ensuite, lorsque j'ai eu la possibilité de copier les domaines restants (non dupliqués), je les ajoute à la liste principale pour demain.

Cela semble assez simple pour le non-programmeur que je suis, mais je n'arrive pas à trouver un moyen facile de le faire nulle part.

Si vous pensez à un moyen facile auquel je n'ai pas pensé, n'hésitez pas à me le faire savoir. Ou si vous avez un don pour Applescript, dites-moi comment faire.

Je vous remercie d'avance.

Thomas

1voto

Il serait plus facile d'utiliser des scripts shell :

grep -vxf master.txt today.txt > today2.txt; cat master.txt today2.txt > master2.txt

0voto

Bibou Points 810

Si vous êtes plus à l'aise avec Applescript, vous pouvez exécuter le shell script de @Lauri Ranta avec l'AppleScript suivant :

do shell script "grep -vxf master.txt today.txt > today2.txt; cat master.txt today2.txt > master2.txt"

Si ce n'est pas clair pour vous, j'ai fait un AppleScript incluant le shell script de @Lauri Ranta.

Voici comment construire pas à pas une application AppleScript qui fusionnera une liste d'aujourd'hui avec une liste principale sans doublons.
. Les chemins d'accès aux listes principales et actuelles sont sauvegardés entre les lancements ou demandés s'ils ne sont pas trouvés/définis.
. Après la fusion, la liste actuelle est effacée

1. Ouvrir l'éditeur AppleScript

2. Coller le code suivant

\-- Merge today list to a master list without duplicates
-- . Paths to master & today lists are saved between launchs or asked if not found/defined
-- . After merge, today list is cleared

-- Path to temporary items folder
property pathToTemp : POSIX path of (path to temporary items)

-- Paths to temporary files
property newAdds\_temp : pathToTemp & "mergeLists\_new\_adds.tmp"
property mergedList\_temp : pathToTemp & "mergeLists\_merged\_list.tmp"

-- Paths to lists
property masterFile : ""
property todayFile : ""

if (masterFile is "") or (not FileExists(masterFile)) then
    set todayFile to ""
    set masterFile to choose file with prompt "Select the master list :"
end if
if (masterFile is false) then
    set todayFile to ""
    set masterFile to ""
else
    if (todayFile is "") or (not FileExists(todayFile)) then
        set todayFile to choose file with prompt "Select the list to add :"
    end if
    if (todayFile is not false) then

        -- Prepare the shell script :       
        set masterFile\_posix to POSIX path of masterFile
        set todayFile\_posix to POSIX path of todayFile
        -- . Save new adds to newAdds\_temp
        set shellScript to "grep -vxf " & masterFile\_posix & " " & todayFile\_posix & " > " & newAdds\_temp & "; "
        -- . Merge master list & new adds to mergedList\_temp (and remove newAdds\_temp file)
        set shellScript to shellScript & "cat " & masterFile\_posix & " " & newAdds\_temp & " > " & mergedList\_temp & "; unlink " & newAdds\_temp & "; "
        -- . Replace master list by merged mergedList\_temp
        set shellScript to shellScript & "mv -f " & mergedList\_temp & " " & masterFile\_posix & "; "
        -- . And clean today file
        set shellScript to shellScript & "echo \\"\\" > " & todayFile\_posix

        -- Execute the generated shell script
        do shell script shellScript

        -- And display a message
        display dialog "Merge done."
    end if
end if

-- This function is inspired from Philip Regan answer on :
-- http://stackoverflow.com/questions/3469389/applescript-testing-for-file-existence
on FileExists(theFile)
    tell application "System Events" to return (exists theFile)
end FileExists

3. Exporter en tant qu'application

Menu Fichier > Exporter > Format de fichier : Application

4. Sauvegardez vos listes !

5. Essayez l'application que vous venez de créer

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