apple script pour iCal

ambrine

Membre expert
Club iGen
18 Novembre 2000
1 115
46
56
Arles
Bonjour,

je voudrais faire un script pour agréger des données d’événements iCal, mais je n’y connais rien...

Avez-vous l’âme charitable pour m’aider ? :)
 
Bonsoir

Peux-tu être plus précis : que souhaites-tu agréger exactement ? Sur quels événements ?

Plus tu es précis, mieux ce sera

Cordialement
Nicolas
 
Bonsoir Nicolas,

merci pour votre intérêt !

Je crée des événements journaliers pour mes fabrications dans un calendrier. Je voudrais pouvoir connaitre entre 2 dates ce que j’ai fabriqué d’une liste qui se trouvera dans le script ou dans un fichier externe.
Je voudrais que le script signale les erreurs dans l’orthographe de mes fabrications et sinon qu’il compte la production du jour par variété et type.
Je fabrique des glaces et des sorbets et un évènement se compose comme suit:

1 caramel 7+5
1 chocolat 9+0
1 amande 7+4

ou bien

1 caramel 7+5 1 chocolat 9+0 1 amande 7+4

le 1er chiffre concerne les bacs qui vont en vitrine, le second concerne les litres que les gens emmènent à la maison, et le “+” est juste un séparateur visuel.

Dans un fichier texte (ou tableur), qui portera un nom en fonction des dates choisies, on trouvera quelque chose comme :
chocolat 85 bacs 36 litres en 15 journée de fabrication pour 16 tournées
caramel 62 bacs 35 litres en 13 journée de fabrication pour 13 tournées
myrtille 63 bacs 27 litres en 12 journée de fabrication pour 14 tournées etc

et pour le fichier des erreurs :

le 13/08/2024 shocolat n’est pas un parfum valide
le 27/05/2024 vanille n’a pas da quantité initiale etc

Voilà en gros ce que j’aimerais pouvoir faire, est-ce que cela vous semble réalisable ?
 
Bonsoir,

Pour extraire les événements de ical cela me semble réalisable.

Par contre il faudrait savoir:
1 - le nom du calendrier dans lequel sont ces événements ?
2 - Dans quel "champs" sont les infos à récupérer ? : dans le nom de l'événement (le premier champs intitulé "Nouvel événement") , ou dans les notes de l'événement (Champs en bas intitulé "Ajouter des notes") ou les deux ?

On peux alors extraire ces éléments dans un fichier texte sur le bureau.

Le traitement des données récupérées pourra se faire ensuite. le fichier pouvant s'ouvrir dans un tableur comme Numbers ou Excel. A la fin il enregistre un fichier "les evenements.txt" sur le bureau, une ligne par événement.

Je te joins un script pour essai
Au lancement le script te demande le nom du calendrier, puis la date du premier jour à extraire, puis le nombre de jours.

pour utiliser ce script:
Ouvrir l’application “Editeur de script” qui est dans Application—>Utilitaires
Choisir le bouton en bas à gauche “Nouveau document”, dans la fenêtre qui s’ouvre faire un copier-coller du script.

Il suffira de cliquer sur le bouton "triangle play" en haut à droite “Exécuter” pour lancer ce script.

Bloc de code:
set lecal to display dialog "Entrer le nom du calendrier :" default answer "Personnel"
set lecal to text returned of result
set ladate to display dialog "Entrer la date de début :" default answer "JJ/MM/AAAA"
set ladate to text returned of result
set lejour to date ladate
set fin to lejour + (1 * days)
set nbjour to display dialog "Entrer le nombre de jours :" default answer "1"
set nbjour to text returned of result
set lefich to ""
tell application "Calendar"
    tell calendar lecal
      
        repeat with i from 1 to nbjour
          
            set theEventList to (every event whose (start date > lejour and end date < fin))
          
            set nbevent to count of theEventList
            repeat with j from 1 to nbevent
                set a to summary of item j of theEventList
                --set a to a as string
                set b to description of item j of theEventList
                --set b to b as string
              
                if b = missing value then set b to "---"
              
                set c to start date of item j of theEventList
                --set c to c as string
                set lefich to lefich & c & tab & a & tab & b & return
              
            end repeat
            set lejour to lejour + (1 * days)
            set fin to lejour + (1 * days)
        end repeat
        display dialog lefich
    end tell
end tell

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "les evenements.txt") as text with write permission
    write lefich & return to lelog starting at eof
    close access lelog
end tell
 
  • J’aime
Réactions: Powerdom
Bonsoir,
quel rapidité pour un premier jet !! Je le testerais dès que possible, merci beaucoup pour vos efforts :)
 
Bonjour,

un nouveau script pour les tests, il fait la même chose mais a été optimisé et est beaucoup plus rapide.
j'attends ton retour, et surtout, la structure de tes données pour regarder s'il est possible de traiter ces données pour les quantités et l'orthographe.
Bloc de code:
set lecal to display dialog "Entrer le nom du calendrier :" default answer "Personnel"
set lecal to text returned of result
set ladate to display dialog "Entrer la date de début :" default answer "JJ/MM/AAAA"
set ladate to text returned of result
set lejour to date ladate

set nbjour to display dialog "Entrer le nombre de jours :" default answer "1"
set nbjour to text returned of result
set fin to lejour + (nbjour * days)
set lefich to ""
tell application "Calendar"
    tell calendar lecal
        
        set theEventList to (every event whose (start date > lejour and end date < fin))
        
        set nbevent to count of theEventList
        repeat with j from 1 to nbevent
            set a to summary of item j of theEventList
            set b to description of item j of theEventList
            
            if b = missing value then set b to "---"
            set c to start date of item j of theEventList
            
            if c is not "" then
                set lefich to lefich & c & tab & a & tab & b & return
            end if
        end repeat
        
    end tell
end tell

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "les evenements.txt") as text with write permission
    write lefich to lelog starting at eof
    close access lelog
end tell
 
Bonsoir,
je viens de faire le premier essai directement avec votre seconde mouture, je vous joints le fichier obtenu.
C’est pas mal, reste à concaténer les parfums ensembles. Le script prend aussi les évènements qui ne sont pas des journées de fabrication.
Il y a des dates mélangées, je suppose donc que les événements sont triés dans iCal au moment de l’affichage.

MacGé ne veut pas de fichier .txt :(

Bloc de code:
jeudi 21 mars 2024 à 00:00:00    1 pêche 7+2 1 fraise 7+3 1 myrtille 9+0    ---
vendredi 22 mars 2024 à 00:00:00    1 caramel 8+4 1 chocolat 7+4    ---
mardi 26 mars 2024 à 00:00:00    1 gingembre 8+5 1 praline 6+4    ---
vendredi 29 mars 2024 à 00:00:00    1 malaga 8+5 1 chocolat 7+5    ---
jeudi 28 mars 2024 à 00:00:00    1 vanille 7+5 1 fadoli 9+0    ---
lundi 1 avril 2024 à 00:00:00    1 citron 8+5    ---
vendredi 5 avril 2024 à 13:30:00    Livraison 3 bouteilles de gaz Midi Gaz (Peut-être entre 12 et 14h, mais probablement avant)    ---
vendredi 5 avril 2024 à 00:00:00    1 cerise 5+3 1 abricot 8+0 1 poire 4+3    ---
jeudi 4 avril 2024 à 00:00:00    1 réglisse 7+5 1 amande 7+5    ---
lundi 8 avril 2024 à 00:00:00    2 cacao 13+6    ---
mardi 9 avril 2024 à 00:00:00    1 café 7+5 1 chocolat 7+5    ---
jeudi 11 avril 2024 à 00:00:00    1 vanille 8+3 1 praline 8+0    ---
vendredi 12 avril 2024 à 00:00:00    1 pêche 8+0 1 prune 11+2 1 figue 7+0    ---
lundi 15 avril 2024 à 00:00:00    1 orange 8+2    ---
mardi 16 avril 2024 à 00:00:00    1 zeste de lune 8+3 1 fadoli 9+1    ---
jeudi 18 avril 2024 à 00:00:00    1 gingembre 8+3 1 cannelle 9+1    ---
vendredi 19 avril 2024 à 00:00:00    1 poire 6+3 1 fraise 6+3 1 cerise 4+4    ---
lundi 22 avril 2024 à 00:00:00    1 thym 7+5 1 amande 8+4    ---
mardi 23 avril 2024 à 00:00:00    1 caramel 10+0 1 chocolat 9+0    ---
jeudi 25 avril 2024 à 00:00:00    1 vanille 7+5 1 thym 9+1    ---
vendredi 26 avril 2024 à 00:00:00    1 citron    ---
lundi 29 avril 2024 à 00:00:00    1 pêche 8+0 1 figue 6+3 1 myrtille 7+3    ---
mercredi 1 mai 2024 à 00:00:00    1 café 9+0
1 praline 8+0    ---
jeudi 2 mai 2024 à 00:00:00    1 malaga 7+6 1 chocolat 8+    ---
vendredi 3 mai 2024 à 00:00:00    1 vanille xxx 1 fadoli yyyy    ---
lundi 6 mai 2024 à 00:00:00    1 poire 6+3 1 cerise 6+0 1 prune 8+0    ---
mercredi 8 mai 2024 à 00:00:00    1 réglisse 9+0 1 fadoli 8+3    ---
jeudi 9 mai 2024 à 00:00:00    1 vanille 7+5 1 gingembre 8+3 1 chocolat 8+3    ---
vendredi 10 mai 2024 à 00:00:00    1 vanille 7+5
1 café 8+3
1 amande 10+0    ---
mardi 14 mai 2024 à 00:00:00    1 pêche 8+0 1 Cerise 5+3 1 figue 6+2    ---
lundi 13 mai 2024 à 00:00:00    1 abricot 7+4 1 fraise 6+4 1 myrtille 7+3    ---
vendredi 17 mai 2024 à 00:00:00    1 réglisse 9+0 1 praline 7+2    ---
jeudi 16 mai 2024 à 00:00:00    1 gingembre 9+0 1 chocolat 9+0    ---
lundi 20 mai 2024 à 00:00:00    1 vanille 7+5
1 fadoli 8+3    ---
mardi 21 mai 2024 à 00:00:00    1 fraise 6+3
1 poire 6+2
1 citron 7+2    ---
jeudi 23 mai 2024 à 00:00:00    1 vanille 7+5 1 cannelle 7+4 1 amande 8+3    ---
lundi 27 mai 2024 à 00:00:00    1 caramel 8+3 2 praline 13+6    ---
mercredi 29 mai 2024 à 00:00:00    1 vanille 8+3 1 caramel 8+3 1 amande 8+3    ---
vendredi 24 mai 2024 à 00:00:00    1 cardamome 7+5 1 café 9+1 1 chocolat 8+3    ---
vendredi 31 mai 2024 à 00:00:00    Pulpe de cerise 6*4,25 + 1,6    ---
jeudi 30 mai 2024 à 00:00:00    1 pêche 7+1 1 abricot 8+1 1 orange 5+5 1 myrtille 9+0    ---
mardi 4 juin 2024 à 00:00:00    1 vanille 7+5 1 amande 10+0 1 chocolat 8+3    ---
lundi 3 juin 2024 à 00:00:00    2 cacao 13+6    ---
jeudi 6 juin 2024 à 00:00:00    1 gingembre 8+3 1 malaga 10+0 1 fadoli 8+3    ---
vendredi 7 juin 2024 à 00:00:00    1 poire 6+2 1 cerise 6+0 1 prune 8+2 1 figue 8+5    ---
lundi 10 juin 2024 à 00:00:00    1 fraise 8+1 1 pêche 7+1 1 poire 6+2 1 citron 7+4    ---
mardi 11 juin 2024 à 00:00:00    1 vanille 7+5
1 gingembre 8+3
1 fadoli 8+3    ---
mercredi 26 juin 2024 à 08:15:00    Contrôle balance - Sud Pesage    ---
jeudi 13 juin 2024 à 00:00:00    1 café 8+3 1 caramel 8+3 1 chocolat 8+3    ---
vendredi 14 juin 2024 à 00:00:00    1 myrtille 7+3
1 cerise 6+0
1 OCB 10+5    ---
lundi 17 juin 2024 à 00:00:00    2 praline 14+4 1 fadoli 8+3    ---
mardi 18 juin 2024 à 00:00:00    1 vanille 7+5 1 gingembre 8+3  fadoli 8+3    ---
 
Bonsoir,
Le script prend aussi les évènements qui ne sont pas des journées de fabrication
Le script prend tous les jours ou il y a un événements de renseigné !

Pour certaine date qui ne sont pas dans l'ordre, je ne comprend pas pourquoi ! Le script ne tri absolument pas, il se contente d'ajouter les événements comme il se présente dans ical !
Pour vérifier tu pourrais essayé avec le script précédant qui lui liste les jours, jour par jour, pour voir si cela se produit également.

Pour concaténer les parfums ensemble,
soit tu le fais dans excel ou numbers
Soit on essai avec le script mais là il y a du boulot, et il faudrait avoir la liste de tous les parfums possibles.

ensuite je n'ai pas compris comment tu retrouves les quantités
exemple: le 30/05/2024 tu as : jeudi 30 mai 2024 à 00:00:00 1 pêche 7+1 1 abricot 8+1 1 orange 5+5 1 myrtille 9+0
Tu traduits çà comment ? cela donnerai ? peut être:

Pêche 7 bacs xx litres (ou est renseigné les litres ?)
abricot 8 bacs xx litres
orange 5 bacs xx litres ( que veut dire le 5+5)
myrtille 9 bacs xx litres ( que veut dire 9+0 alors que les autre parfums c'est X+1 ou X+5 ?)

bref, désolé je ne comprend pas !
 
Bonjour,
je te joins un nouveau script qui:
Comme le précédent il te crée le fichiers texte "Les evenements.txt" sur le bureau puis il crée un fichier "quantite.txt" sur le bureau.
Ce fichier "quantite.txt" contient la liste de tous les parfums contenus dans ma liste et qui sont dans les évènements, avec les différentes valeurs qui suivent (que je ne sais pas interpréter !)

Ma liste est :
"caramel", "fraise", "myrtille", "chocolat", "pêche", "gingembre", "praline", "malaga", "fadoli", "citron", "cerise", "abricot", "poire", "réglisse", "amande", "cacao", "café", "prune", "figue", "orange", "zeste de lune", "cannelle", "thym", "cardamone", "pulpe de cerise"
Il faudra certainement la compléter

Dis moi si cela te convient et quelles modifications il faudrait envisager.

Bloc de code:
set lecal to display dialog "Entrer le nom du calendrier :" default answer "Personnel"
set lecal to text returned of result
set ladate to display dialog "Entrer la date de début :" default answer "JJ/MM/AAAA"
set ladate to text returned of result
set lejour to date ladate

set nbjour to display dialog "Entrer le nombre de jours :" default answer "1"
set nbjour to text returned of result
set fin to lejour + (nbjour * days)
set lefich to ""
tell application "Calendar"
    tell calendar lecal
     
        set theEventList to (every event whose (start date > lejour and end date < fin))
     
        set nbevent to count of theEventList
        repeat with j from 1 to nbevent
            set a to summary of item j of theEventList
            set c to start date of item j of theEventList
         
            if c is not "" then
                set lefich to lefich & c & tab & a & " " & return
            end if
        end repeat
    end tell
end tell

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "les evenements.txt") as text with write permission
    write lefich to lelog starting at eof
    close access lelog
end tell

set vartoto to lefich

set lesparfums to {"caramel", "fraise", "myrtille", "chocolat", "pêche", "gingembre", "praline", "malaga", "fadoli", "citron", "cerise", "abricot", "poire", "réglisse", "amande", "cacao", "café", "prune", "figue", "orange", "zeste de lune", "cannelle", "thym", "cardamone", "pulpe de cerise"}

set nbparfums to count of lesparfums

set quantite to ""
repeat with nb from 1 to nbparfums
    set cherche to item nb of lesparfums
    set resultat to cherche & " = "
    set AppleScript's text item delimiters to cherche
 
    set nb to count text item of vartoto
 
    if nb > 1 then
        repeat with i from 2 to nb
            set trouve to text item i of vartoto
            set AppleScript's text item delimiters to " "
            set ajout to text item 2 of trouve
            set resultat to resultat & ajout
            if i is not nb then set resultat to resultat & " et "
            set AppleScript's text item delimiters to cherche
        end repeat
     
        set quantite to quantite & resultat & return
    end if
end repeat

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "Quantites.txt") as text with write permission
    write quantite to lelog starting at eof
    close access lelog
end tell
 
Dernière édition:
Bonsoir zeltron,

tu es un besogneux !! Merci !

Alors voilà quelques explications:
Le nombre devant le parfum indique combien de dose j’ai fabriqué ce jour là, il est rarement supérieur à 1.
Les 2 nombres après le parfum indiquent, pour le premier, combien de bacs (destiné à la vente en cornet) j’ai fait, et pour le second, combien de litres (destiné à la vente à emporter). Il arrive régulièrement que ce second nombre soit à zéro (car j’ai suffisamment de stock).
Le but est d’additionner les bacs entre eux et les litres entre eux pour chaque parfum.

Je fabrique aussi mes pulpes de fruits servant à faire les sorbets, donc c’est un produit intermédiaire. La présentation de cet événement est un peu différente de celle des glaces:
pulpe de cerise 6*4,25 + 1,6
je décode, 6 bacs de cerise de 4,25kg plus un bac de seulement 1,6kg; les premiers sont des bacs complets qui me permettront de faire une dose de sorbet cerise, le bac “incomplet” est généralement associé à un autre bac incomplet (ou complet).

dans la deuxième mouture du fichier “les événements” il y a des jours en doubles, le 30 mai 2024 et d’autres.

ci-dessous le résultat du fichier Quantités
caramel = 8+4 et 10+0 et 8+3 et 8+3 et 8+3 et 8+3 fraise = 7+3 et 6+3 et 6+4 et 6+3 1 et 8+1 myrtille = 9+0 et 7+3 et 7+3 et 9+0 et 7+3 1 chocolat = 7+4 et 7+5 et 7+5 et 9+0 et 8+ et 8+3 et 9+0 et 8+3 et 8+3 et 8+3 et 8+3 pêche = 7+2 et 8+0 et 8+0 et 8+0 et 7+1 et 7+1 gingembre = 8+5 et 8+3 et 8+3 et 9+0 et 8+3 et 8+3 1 et 8+3 praline = 6+4 et 8+0 et 8+0 et 7+2 et 13+6 et 14+4 malaga = 8+5 et 7+6 et 10+0 fadoli = 9+0 et 9+1 et yyyy et 8+3 et 8+3 et 8+3 et 8+3 et 8+3 et 8+3 citron = 8+5 et lundi et 7+2 et 7+4 cerise = 5+3 et 4+4 et 6+0 et 5+3 et 6*4,25 et 6+0 et 6+0 1 abricot = 8+0 et 7+4 et 8+1 poire = 4+3 et 6+3 et 6+3 et 6+2 1 et 6+2 et 6+2 réglisse = 7+5 et 9+0 et 9+0 amande = 7+5 et 8+4 et 10+0 et 8+3 et 8+3 et 10+0 cacao = 13+6 et 13+6 café = 7+5 et 9+0 1 et 8+3 1 et 9+1 et 8+3 et 8+3 prune = 11+2 et 8+0 et 8+2 figue = 7+0 et 6+3 et 6+2 et 8+5 orange = 8+2 et 5+5 zeste de lune = 8+3 cannelle = 9+1 et 7+4 thym = 7+5 et 9+1 pulpe de cerise = 6*4,25

fichier “les événements"
jeudi 21 mars 2024 à 00:00:00 1 pêche 7+2 1 fraise 7+3 1 myrtille 9+0 --- vendredi 22 mars 2024 à 00:00:00 1 caramel 8+4 1 chocolat 7+4 --- mardi 26 mars 2024 à 00:00:00 1 gingembre 8+5 1 praline 6+4 --- vendredi 29 mars 2024 à 00:00:00 1 malaga 8+5 1 chocolat 7+5 --- jeudi 28 mars 2024 à 00:00:00 1 vanille 7+5 1 fadoli 9+0 --- lundi 1 avril 2024 à 00:00:00 1 citron 8+5 --- vendredi 5 avril 2024 à 13:30:00 Livraison 3 bouteilles de gaz Midi Gaz (Peut-être entre 12 et 14h, mais probablement avant) --- vendredi 5 avril 2024 à 00:00:00 1 cerise 5+3 1 abricot 8+0 1 poire 4+3 --- jeudi 4 avril 2024 à 00:00:00 1 réglisse 7+5 1 amande 7+5 --- lundi 8 avril 2024 à 00:00:00 2 cacao 13+6 --- mardi 9 avril 2024 à 00:00:00 1 café 7+5 1 chocolat 7+5 --- jeudi 11 avril 2024 à 00:00:00 1 vanille 8+3 1 praline 8+0 --- vendredi 12 avril 2024 à 00:00:00 1 pêche 8+0 1 prune 11+2 1 figue 7+0 --- lundi 15 avril 2024 à 00:00:00 1 orange 8+2 --- mardi 16 avril 2024 à 00:00:00 1 zeste de lune 8+3 1 fadoli 9+1 --- jeudi 18 avril 2024 à 00:00:00 1 gingembre 8+3 1 cannelle 9+1 --- vendredi 19 avril 2024 à 00:00:00 1 poire 6+3 1 fraise 6+3 1 cerise 4+4 --- lundi 22 avril 2024 à 00:00:00 1 thym 7+5 1 amande 8+4 --- mardi 23 avril 2024 à 00:00:00 1 caramel 10+0 1 chocolat 9+0 --- jeudi 25 avril 2024 à 00:00:00 1 vanille 7+5 1 thym 9+1 --- vendredi 26 avril 2024 à 00:00:00 1 citron --- lundi 29 avril 2024 à 00:00:00 1 pêche 8+0 1 figue 6+3 1 myrtille 7+3 --- mercredi 1 mai 2024 à 00:00:00 1 café 9+0 1 praline 8+0 --- jeudi 2 mai 2024 à 00:00:00 1 malaga 7+6 1 chocolat 8+ --- vendredi 3 mai 2024 à 00:00:00 1 vanille xxx 1 fadoli yyyy --- lundi 6 mai 2024 à 00:00:00 1 poire 6+3 1 cerise 6+0 1 prune 8+0 --- mercredi 8 mai 2024 à 00:00:00 1 réglisse 9+0 1 fadoli 8+3 --- jeudi 9 mai 2024 à 00:00:00 1 vanille 7+5 1 gingembre 8+3 1 chocolat 8+3 --- vendredi 10 mai 2024 à 00:00:00 1 vanille 7+5 1 café 8+3 1 amande 10+0 --- mardi 14 mai 2024 à 00:00:00 1 pêche 8+0 1 Cerise 5+3 1 figue 6+2 --- lundi 13 mai 2024 à 00:00:00 1 abricot 7+4 1 fraise 6+4 1 myrtille 7+3 --- vendredi 17 mai 2024 à 00:00:00 1 réglisse 9+0 1 praline 7+2 --- jeudi 16 mai 2024 à 00:00:00 1 gingembre 9+0 1 chocolat 9+0 --- lundi 20 mai 2024 à 00:00:00 1 vanille 7+5 1 fadoli 8+3 --- mardi 21 mai 2024 à 00:00:00 1 fraise 6+3 1 poire 6+2 1 citron 7+2 --- jeudi 23 mai 2024 à 00:00:00 1 vanille 7+5 1 cannelle 7+4 1 amande 8+3 --- lundi 27 mai 2024 à 00:00:00 1 caramel 8+3 2 praline 13+6 --- mercredi 29 mai 2024 à 00:00:00 1 vanille 8+3 1 caramel 8+3 1 amande 8+3 --- vendredi 24 mai 2024 à 00:00:00 1 cardamome 7+5 1 café 9+1 1 chocolat 8+3 --- vendredi 31 mai 2024 à 00:00:00 Pulpe de cerise 6*4,25 + 1,6 --- jeudi 30 mai 2024 à 00:00:00 1 pêche 7+1 1 abricot 8+1 1 orange 5+5 1 myrtille 9+0 --- mardi 4 juin 2024 à 00:00:00 1 vanille 7+5 1 amande 10+0 1 chocolat 8+3 --- lundi 3 juin 2024 à 00:00:00 2 cacao 13+6 --- jeudi 6 juin 2024 à 00:00:00 1 gingembre 8+3 1 malaga 10+0 1 fadoli 8+3 --- vendredi 7 juin 2024 à 00:00:00 1 poire 6+2 1 cerise 6+0 1 prune 8+2 1 figue 8+5 --- lundi 10 juin 2024 à 00:00:00 1 fraise 8+1 1 pêche 7+1 1 poire 6+2 1 citron 7+4 --- mardi 11 juin 2024 à 00:00:00 1 vanille 7+5 1 gingembre 8+3 1 fadoli 8+3 --- mercredi 26 juin 2024 à 08:15:00 Contrôle balance - Sud Pesage --- jeudi 13 juin 2024 à 00:00:00 1 café 8+3 1 caramel 8+3 1 chocolat 8+3 --- vendredi 14 juin 2024 à 00:00:00 1 myrtille 7+3 1 cerise 6+0 1 OCB 10+5 --- lundi 17 juin 2024 à 00:00:00 2 praline 14+4 1 fadoli 8+3 --- mardi 18 juin 2024 à 00:00:00 1 vanille 7+5 1 gingembre 8+3 fadoli 8+3 --- jeudi 21 mars 2024 à 00:00:00 1 pêche 7+2 1 fraise 7+3 1 myrtille 9+0 vendredi 22 mars 2024 à 00:00:00 1 caramel 8+4 1 chocolat 7+4 mardi 26 mars 2024 à 00:00:00 1 gingembre 8+5 1 praline 6+4 vendredi 29 mars 2024 à 00:00:00 1 malaga 8+5 1 chocolat 7+5 jeudi 28 mars 2024 à 00:00:00 1 vanille 7+5 1 fadoli 9+0 lundi 1 avril 2024 à 00:00:00 1 citron 8+5 vendredi 5 avril 2024 à 13:30:00 Livraison 3 bouteilles de gaz Midi Gaz (Peut-être entre 12 et 14h, mais probablement avant) vendredi 5 avril 2024 à 00:00:00 1 cerise 5+3 1 abricot 8+0 1 poire 4+3 jeudi 4 avril 2024 à 00:00:00 1 réglisse 7+5 1 amande 7+5 lundi 8 avril 2024 à 00:00:00 2 cacao 13+6 mardi 9 avril 2024 à 00:00:00 1 café 7+5 1 chocolat 7+5 jeudi 11 avril 2024 à 00:00:00 1 vanille 8+3 1 praline 8+0 vendredi 12 avril 2024 à 00:00:00 1 pêche 8+0 1 prune 11+2 1 figue 7+0 lundi 15 avril 2024 à 00:00:00 1 orange 8+2 mardi 16 avril 2024 à 00:00:00 1 zeste de lune 8+3 1 fadoli 9+1 jeudi 18 avril 2024 à 00:00:00 1 gingembre 8+3 1 cannelle 9+1 vendredi 19 avril 2024 à 00:00:00 1 poire 6+3 1 fraise 6+3 1 cerise 4+4 lundi 22 avril 2024 à 00:00:00 1 thym 7+5 1 amande 8+4 mardi 23 avril 2024 à 00:00:00 1 caramel 10+0 1 chocolat 9+0 jeudi 25 avril 2024 à 00:00:00 1 vanille 7+5 1 thym 9+1 vendredi 26 avril 2024 à 00:00:00 1 citron lundi 29 avril 2024 à 00:00:00 1 pêche 8+0 1 figue 6+3 1 myrtille 7+3 mercredi 1 mai 2024 à 00:00:00 1 café 9+0 1 praline 8+0 jeudi 2 mai 2024 à 00:00:00 1 malaga 7+6 1 chocolat 8+ vendredi 3 mai 2024 à 00:00:00 1 vanille xxx 1 fadoli yyyy lundi 6 mai 2024 à 00:00:00 1 poire 6+3 1 cerise 6+0 1 prune 8+0 mercredi 8 mai 2024 à 00:00:00 1 réglisse 9+0 1 fadoli 8+3 jeudi 9 mai 2024 à 00:00:00 1 vanille 7+5 1 gingembre 8+3 1 chocolat 8+3 vendredi 10 mai 2024 à 00:00:00 1 vanille 7+5 1 café 8+3 1 amande 10+0 mardi 14 mai 2024 à 00:00:00 1 pêche 8+0 1 Cerise 5+3 1 figue 6+2 lundi 13 mai 2024 à 00:00:00 1 abricot 7+4 1 fraise 6+4 1 myrtille 7+3 vendredi 17 mai 2024 à 00:00:00 1 réglisse 9+0 1 praline 7+2 jeudi 16 mai 2024 à 00:00:00 1 gingembre 9+0 1 chocolat 9+0 lundi 20 mai 2024 à 00:00:00 1 vanille 7+5 1 fadoli 8+3 mardi 21 mai 2024 à 00:00:00 1 fraise 6+3 1 poire 6+2 1 citron 7+2 jeudi 23 mai 2024 à 00:00:00 1 vanille 7+5 1 cannelle 7+4 1 amande 8+3 lundi 27 mai 2024 à 00:00:00 1 caramel 8+3 2 praline 13+6 mercredi 29 mai 2024 à 00:00:00 1 vanille 8+3 1 caramel 8+3 1 amande 8+3 vendredi 24 mai 2024 à 00:00:00 1 cardamome 7+5 1 café 9+1 1 chocolat 8+3 vendredi 31 mai 2024 à 00:00:00 Pulpe de cerise 6*4,25 + 1,6 jeudi 30 mai 2024 à 00:00:00 1 pêche 7+1 1 abricot 8+1 1 orange 5+5 1 myrtille 9+0 mardi 4 juin 2024 à 00:00:00 1 vanille 7+5 1 amande 10+0 1 chocolat 8+3 lundi 3 juin 2024 à 00:00:00 2 cacao 13+6 jeudi 6 juin 2024 à 00:00:00 1 gingembre 8+3 1 malaga 10+0 1 fadoli 8+3 vendredi 7 juin 2024 à 00:00:00 1 poire 6+2 1 cerise 6+0 1 prune 8+2 1 figue 8+5 lundi 10 juin 2024 à 00:00:00 1 fraise 8+1 1 pêche 7+1 1 poire 6+2 1 citron 7+4 mardi 11 juin 2024 à 00:00:00 1 vanille 7+5 1 gingembre 8+3 1 fadoli 8+3 mercredi 26 juin 2024 à 08:15:00 Contrôle balance - Sud Pesage jeudi 13 juin 2024 à 00:00:00 1 café 8+3 1 caramel 8+3 1 chocolat 8+3 vendredi 14 juin 2024 à 00:00:00 1 myrtille 7+3 1 cerise 6+0 1 OCB 10+5 lundi 17 juin 2024 à 00:00:00 2 praline 14+4 1 fadoli 8+3 mardi 18 juin 2024 à 00:00:00 1 vanille 7+5 1 gingembre 8+3 fadoli 8+3 jeudi 20 juin 2024 à 00:00:00 1 café 8+3 1 caramel 8+3 1 chocolat 8+3


Le résultat a obtenir serait:
caramel 6 tournées 50 bacs 16 litres
fraise 5 tournées 33 bacs 14 litres
etc
 
Dernière édition:
Bonjour,

Suite à tes explications je te mets une nouvelle version du script.

Elle te crée un fichier « événements.txt » et un fichier « quantités.txt » donnant les infos que tu demandes.
Attention si des fichiers avec ce même nom existent sur le bureau leur contenu est effacé et remplacé . Donc si tu veux garder une ancienne version il faut les renommer ou les déplacer.

A la fin du traitement il mets un message comme quoi il a terminé.

Dis moi si cela te va ou si des modifications sont à faire.

Bloc de code:
set lecal to display dialog "Entrer le nom du calendrier :" default answer "Personnel"
set lecal to text returned of result
set ladate to display dialog "Entrer la date de début :" default answer "JJ/MM/AAAA"
set ladate to text returned of result
set lejour to date ladate

set nbjour to display dialog "Entrer le nombre de jours :" default answer "1"
set nbjour to text returned of result
set fin to lejour + (nbjour * days)
set lefich to ""
tell application "Calendar"
    tell calendar lecal
        
        set theEventList to (every event whose (start date > lejour and end date < fin))
        
        set nbevent to count of theEventList
        repeat with j from 1 to nbevent
            set a to summary of item j of theEventList
            set c to start date of item j of theEventList
            
            if c is not "" then
                set lefich to lefich & c & tab & a & " " & return
            end if
        end repeat
    end tell
end tell

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "les evenements.txt") as text with write permission
    set eof lelog to 0
    write lefich to lelog starting at eof
    close access lelog
end tell

set vartoto to lefich

set lesparfums to {"caramel", "fraise", "myrtille", "chocolat", "pêche", "gingembre", "praline", "malaga", "fadoli", "citron", "cerise", "abricot", "poire", "réglisse", "amande", "cacao", "café", "prune", "figue", "orange", "zeste de lune", "cannelle", "thym", "cardamome", "pulpe de cerise"}

set nbparfums to count of lesparfums

set quantite to ""
repeat with nb from 1 to nbparfums
    set cherche to item nb of lesparfums
    set resultat to cherche & " = "
    set tourne to 0
    set bac to 0
    set litre to 0
    set AppleScript's text item delimiters to cherche
    
    set nb to count text item of vartoto
    
    if nb > 1 then
        repeat with i from 2 to nb
            set trouve to text item i of vartoto
            set devant to text item (i - 1) of vartoto
            
            set nbdose to text -3 thru -1 of devant
            set AppleScript's text item delimiters to " "
            
            set ajout to text item 2 of trouve
            
            
            if "*" is in ajout then
                if nbdose is not number then
                    set avant to text -8 thru -1 of devant
                    if ":" is in avant then
                        set lafin to first paragraph of trouve
                        set AppleScript's text item delimiters to "*"
                        set nbbac to text item 1 of lafin
                        set lepoid to text item 2 of lafin
                        set quantite to quantite & cherche & " " & nbbac & " bacs de " & lepoid & " kg" & return
                        
                    end if
                end if
            else
                
                set tourne to tourne + 1
                set AppleScript's text item delimiters to "+"
                set bac to bac + (nbdose * (text item 1 of ajout))
                set litre to litre + (nbdose * (text item 2 of ajout))
            end if
            
            set AppleScript's text item delimiters to cherche
        end repeat
        if bac is not 0 then
            set quantite to quantite & cherche & "  " & tourne & " tournées " & bac & " bacs " & litre & " litres" & return
        end if
    end if
    
end repeat

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "Quantites.txt") as text with write permission
    set eof lelog to 0
    write quantite to lelog starting at eof
    close access lelog
end tell

tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Bonjour,

J'ai profité d'un peu de temps libre pour compléter ton script.
les news !
-Il enlève les espaces de début et de fin dans les évènements
-Il enlève les espaces multiples au milieu des évènements (Ceci sans modifié dans le calendrier)
-il cherche les erreurs dans les parfums (orthographe ou parfum nom renseigné dans la liste)
-Il crée un fichier texte "les erreurs.txt" sur le bureau si parfum non trouvé dans la liste
-La liste des parfums est dans la première ligne du script, ceci afin de pouvoir ajouter, plus facilement, des parfums si nécessaire.

Dis moi si cela fonctionne chez toi et s'il faut modifier quelque chose !
Bon tests !


Bloc de code:
set lesparfums to {"abricot", "amande", "cacao", "café", "cannelle", "caramel", "cardamome", "cerise", "chocolat", "citron", "fadoli", "figue", "fraise", "gingembre", "malaga", "myrtille", "orange", "pêche", "poire", "praline", "prune", "pulpe de cerise", "réglisse", "thym", "zeste de lune"}

set lecal to display dialog "Entrer le nom du calendrier :" default answer "Personnel"
set lecal to text returned of result
set ladate to display dialog "Entrer la date de début :" default answer "JJ/MM/AAAA"
set ladate to text returned of result
set lejour to date ladate

set nbjour to display dialog "Entrer le nombre de jours :" default answer "1"
set nbjour to text returned of result
set fin to lejour + (nbjour * days)
set lefich to ""

tell application "Calendar"
    tell calendar lecal
       
        set theEventList to (every event whose (start date > lejour and end date < fin))
       
        set nbevent to count of theEventList
        repeat with j from 1 to nbevent
            set a to summary of item j of theEventList
            set c to start date of item j of theEventList
            set ladate to c as string
           
            --enleve blanc fin
            repeat
                set letest to last character of a
                if letest = " " then
                    set a to text items 1 thru -2 of a as string
                else
                    exit repeat
                end if
            end repeat
            --enleve blanc debut
            repeat
                set letest to first character of a
                if letest = " " then
                    set a to text items 2 thru -1 of a as string
                else
                    exit repeat
                end if
            end repeat
            --enleve blanc milieu
            set i to 1
            repeat
                set letest to character i of a
                if letest = " " then
                    set suivant to character (i + 1) of a
                    if suivant = " " then
                        set debnewa to (text 1 thru i of a) as string
                        set finnewa to (text (i + 2) thru -1 of a) as string
                        set a to debnewa & finnewa
                        set nb to nb - 1
                        set i to i - 1
                    end if
                end if
                set i to i + 1
                set nb to count character of a
                if i = nb then exit repeat
            end repeat
           
            --verifie si parfum existe
            set AppleScript's text item delimiters to " "
            set nb to count text item of a
           
            set nom to ""
            repeat with i from 1 to nb
                set b to text item i of a
                set test to ASCII number (character 1 of b)
                if test < 65 then
                    if nom is not "" then
                        if nom is not in lesparfums then
                           
                            tell application "Finder"
                                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                                write ladate & " " & a & " le parfum : " & nom & " n'existe pas ! " & return to lelog starting at eof
                                close access lelog
                            end tell
                           
                        end if
                        set nom to ""
                    end if
                else
                    if nom is not "" then set nom to nom & " "
                    set nom to nom & text item i of a
                end if
            end repeat
           
           
            --prepare fichier evenements
            if c is not "" then
                set lefich to lefich & c & tab & a & " " & return
            end if
        end repeat
    end tell
end tell
--crée fichier evenements
tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "les evenements.txt") as text with write permission
    set eof lelog to 0
    write lefich to lelog starting at eof
    close access lelog
end tell

--ajout quantite par parfum
set vartoto to lefich
set nbparfums to count of lesparfums

set quantite to ""
repeat with nb from 1 to nbparfums
    set cherche to item nb of lesparfums
    set resultat to cherche & " = "
    set tourne to 0
    set bac to 0
    set litre to 0
    set AppleScript's text item delimiters to cherche
   
    set nb to count text item of vartoto
   
    if nb > 1 then
        repeat with i from 2 to nb
            set trouve to text item i of vartoto
            set devant to text item (i - 1) of vartoto
           
            set nbdose to text -3 thru -1 of devant
            set AppleScript's text item delimiters to " "
           
            set ajout to text item 2 of trouve
           
            --traite les intermediaires (pulpe) sans cumuler les quantitiés
            if "*" is in ajout then
                if nbdose is not number then
                    set avant to text -8 thru -1 of devant
                    if ":" is in avant then
                        set lafin to first paragraph of trouve
                        set AppleScript's text item delimiters to "*"
                        set nbbac to text item 1 of lafin
                        set lepoid to text item 2 of lafin
                        set quantite to quantite & cherche & " " & nbbac & " bacs de " & lepoid & " kg" & return
                       
                    end if
                end if
            else
               
                set tourne to tourne + 1
                set AppleScript's text item delimiters to "+"
                set bac to bac + (nbdose * (text item 1 of ajout))
                set litre to litre + (nbdose * (text item 2 of ajout))
            end if
           
            set AppleScript's text item delimiters to cherche
        end repeat
        if bac is not 0 then
            set quantite to quantite & cherche & "  " & tourne & " tournées " & bac & " bacs " & litre & " litres" & return
        end if
    end if
   
end repeat

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "Quantites.txt") as text with write permission
    set eof lelog to 0
    write quantite to lelog starting at eof
    close access lelog
end tell

tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Bonsoir,
je suis débordé, je n’ai même pas pu vous répondre, j’espère pouvoir essayer le nouveau demain, encore merci pour tout ! :)
 
Bonsoir, j’ai fait l’essai, il bloque sur une erreur, vous trouverez la copie d’écran en pièce jointe.
Je pense que le problème vient de ce que j’utilise souvent un retour chariot et non un espace entre 2 parfums.
 

Fichiers joints

  • Capture d’écran 2024-06-29 à 23.42.24.jpg
    Capture d’écran 2024-06-29 à 23.42.24.jpg
    78,2 KB · Affichages: 3
Bonjour,

A priori le problème vient d'une saisie sans la quantité (sans signe "+" genre "1 Cerise 5", ou bien alors avec un espace devant le signe "+ " genre " 1 Cerise 5 +1") .
Ceci doit être visible dans le fichier "evenement.txt" créé sur le bureau.
Je vais regarder pour essayer de détecter ce genre de problème !
 
Dernière édition:
Bon !
J'ai ajouté la suppression des espaces devant et derrière le signe "+" cela devrait fonctionner . (testé chez moi c'est OK!)
A savoir également la liste des parfums est mis dans l'ordre alphabétique ce qui permet d'avoir les résultats dans le fichier quantité classer dans l'ordre.
j' attends ton retour !
Bloc de code:
set lesparfums to {"abricot", "amande", "cacao", "café", "cannelle", "caramel", "cardamome", "cerise", "chocolat", "citron", "fadoli", "figue", "fraise", "gingembre", "malaga", "myrtille", "orange", "pêche", "poire", "praline", "prune", "pulpe de cerise", "réglisse", "thym", "zeste de lune"}

set lecal to display dialog "Entrer le nom du calendrier :" default answer "Personnel"
set lecal to text returned of result
set ladate to display dialog "Entrer la date de début :" default answer "JJ/MM/AAAA"
set ladate to text returned of result
set lejour to date ladate

set nbjour to display dialog "Entrer le nombre de jours :" default answer "1"
set nbjour to text returned of result
set fin to lejour + (nbjour * days)
set lefich to ""

tell application "Calendar"
    tell calendar lecal
        
        set theEventList to (every event whose (start date > lejour and end date < fin))
        
        set nbevent to count of theEventList
        repeat with j from 1 to nbevent
            set a to summary of item j of theEventList
            set c to start date of item j of theEventList
            set ladate to c as string
            
            --enleve blanc fin
            repeat
                set letest to last character of a
                if letest = " " then
                    set a to text items 1 thru -2 of a as string
                else
                    exit repeat
                end if
            end repeat
            --enleve blanc debut
            repeat
                set letest to first character of a
                if letest = " " then
                    set a to text items 2 thru -1 of a as string
                else
                    exit repeat
                end if
            end repeat
            --enleve double blanc milieu et blanc devant +
            set i to 1
            repeat
                set letest to character i of a
                if letest = " " then
                    set suivant to character (i + 1) of a
                    if suivant = " " or suivant = "+" then
                        set debnewa to (text 1 thru (i - 1) of a) as string
                        set finnewa to (text (i + 1) thru -1 of a) as string
                        set a to debnewa & finnewa
                        set nb to nb - 1
                        set i to i - 1
                    end if
                    
                end if
                set i to i + 1
                set nb to count character of a
                if i = nb then exit repeat
            end repeat
            --enleve les blancs derriere les +
            set i to 1
            repeat
                set letest to character i of a
                if letest = "+" then
                    set suivant to character (i + 1) of a
                    if suivant = " " then
                        set debnewa to (text 1 thru i of a) as string
                        set finnewa to (text (i + 2) thru -1 of a) as string
                        set a to debnewa & finnewa
                        set nb to nb - 1
                        set i to i - 1
                    end if
                    
                end if
                set i to i + 1
                set nb to count character of a
                if i = nb then exit repeat
            end repeat
            
            
            
            --verifie si parfum existe
            set AppleScript's text item delimiters to " "
            set nb to count text item of a
            
            set nom to ""
            repeat with i from 1 to nb
                set b to text item i of a
                set test to ASCII number (character 1 of b)
                if test < 65 then
                    if nom is not "" then
                        if nom is not in lesparfums then
                            
                            tell application "Finder"
                                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                                write ladate & " " & a & " le parfum : " & nom & " n'existe pas ! " & return to lelog starting at eof
                                close access lelog
                            end tell
                            
                        end if
                        set nom to ""
                    end if
                else
                    if nom is not "" then set nom to nom & " "
                    set nom to nom & text item i of a
                end if
            end repeat
            
            
            --prepare fichier evenements
            if c is not "" then
                set lefich to lefich & c & tab & a & " " & return
            end if
        end repeat
    end tell
end tell
--crée fichier evenements
tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "les evenements.txt") as text with write permission
    set eof lelog to 0
    write lefich to lelog starting at eof
    close access lelog
end tell

--ajout quantite par parfum
set vartoto to lefich
set nbparfums to count of lesparfums

set quantite to ""
repeat with nb from 1 to nbparfums
    set cherche to item nb of lesparfums
    set resultat to cherche & " = "
    set tourne to 0
    set bac to 0
    set litre to 0
    set AppleScript's text item delimiters to cherche
    
    set nb to count text item of vartoto
    
    if nb > 1 then
        repeat with i from 2 to nb
            set trouve to text item i of vartoto
            set devant to text item (i - 1) of vartoto
            
            set nbdose to text -3 thru -1 of devant
            set AppleScript's text item delimiters to " "
            
            set ajout to text item 2 of trouve
            
            --traite les intermediaires (pulpe) sans cumuler les quantitiés
            if "*" is in ajout then
                if nbdose is not number then
                    set avant to text -8 thru -1 of devant
                    if ":" is in avant then
                        set lafin to first paragraph of trouve
                        set AppleScript's text item delimiters to "*"
                        set nbbac to text item 1 of lafin
                        set lepoid to text item 2 of lafin
                        set quantite to quantite & cherche & " " & nbbac & " bacs de " & lepoid & " kg" & return
                        
                    end if
                end if
            else
                
                set tourne to tourne + 1
                set AppleScript's text item delimiters to "+"
                set bac to bac + (nbdose * (text item 1 of ajout))
                set litre to litre + (nbdose * (text item 2 of ajout))
            end if
            
            set AppleScript's text item delimiters to cherche
        end repeat
        if bac is not 0 then
            set quantite to quantite & cherche & "  " & tourne & " tournées " & bac & " bacs " & litre & " litres" & return
        end if
    end if
    
end repeat

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "Quantites.txt") as text with write permission
    set eof lelog to 0
    write quantite to lelog starting at eof
    close access lelog
end tell

tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Bonsoir, j’ai encore la même erreur, le fichier "quantité" n’est pas créé. Si la quantité est composé de 2 chiffres, est-ce que ce sera reconnu par votre algorithme ?
Pouvez-vous sauter les événements qui ne prennent pas toute la journée (sans horaire en faite) ?
Est-il possible d’exporter mon calendrier (de date à date?) pour que ce soit plus facile de faire des tests ?
 
Bonsoir,
Si la quantité est composé de 2 chiffres, est-ce que ce sera reconnu par votre algorithme ?
Oui pas de problème.

Pour voir ce qui ne va pas il faudrait:
  • me mettre le fichier "les evenements.txt" il contient les éléments sur lequel il travaille.
  • Faire tes tests sur une courte période (quelques jours, 1, 2 ou 3) pour voir quel jour pose problème

je peux ajouter dans le script , qu'il saute les parfums qui posent problèmes, mais il y aura de la recherche pour voir sur quel jour il y a le problème.
Il crée un fichier "Erreur traitement.txt" sur le bureau qui contient le nom du parfum qui à posé problème ainsi que le numéro de son occurrence dans le fichier "les evenements.txt" (la énième fois qu'il à trouver ce parfum).

Cela devrait permettre de trouver plus facilement la date qui a le parfum qui pose problème.
Une erreur possible: pas de signe "+" entre autres
bon tests !

le script
Bloc de code:
set lesparfums to {"abricot", "amande", "cacao", "café", "cannelle", "caramel", "cardamome", "cerise", "chocolat", "citron", "fadoli", "figue", "fraise", "gingembre", "malaga", "myrtille", "orange", "pêche", "poire", "praline", "prune", "pulpe de cerise", "réglisse", "thym", "zeste de lune"}

set lecal to display dialog "Entrer le nom du calendrier :" default answer "Personnel"
set lecal to text returned of result
set ladate to display dialog "Entrer la date de début :" default answer "JJ/MM/AAAA"
set ladate to text returned of result
set lejour to date ladate

set nbjour to display dialog "Entrer le nombre de jours :" default answer "1"
set nbjour to text returned of result
set fin to lejour + (nbjour * days)
set lefich to ""

tell application "Calendar"
    tell calendar lecal
     
        set theEventList to (every event whose (start date > lejour and end date < fin))
     
        set nbevent to count of theEventList
        repeat with j from 1 to nbevent
            set a to summary of item j of theEventList
            set c to start date of item j of theEventList
            set ladate to c as string
         
            --enleve blanc fin
            repeat
                set letest to last character of a
                if letest = " " then
                    set a to text items 1 thru -2 of a as string
                else
                    exit repeat
                end if
            end repeat
            --enleve blanc debut
            repeat
                set letest to first character of a
                if letest = " " then
                    set a to text items 2 thru -1 of a as string
                else
                    exit repeat
                end if
            end repeat
            --enleve double blanc milieu et blanc devant +
            set i to 1
            repeat
                set letest to character i of a
                if letest = " " then
                    set suivant to character (i + 1) of a
                    if suivant = " " or suivant = "+" then
                        set debnewa to (text 1 thru (i - 1) of a) as string
                        set finnewa to (text (i + 1) thru -1 of a) as string
                        set a to debnewa & finnewa
                        set nb to nb - 1
                        set i to i - 1
                    end if
                 
                end if
                set i to i + 1
                set nb to count character of a
                if i = nb then exit repeat
            end repeat
            --enleve les blancs derriere les +
            set i to 1
            repeat
                set letest to character i of a
                if letest = "+" then
                    set suivant to character (i + 1) of a
                    if suivant = " " then
                        set debnewa to (text 1 thru i of a) as string
                        set finnewa to (text (i + 2) thru -1 of a) as string
                        set a to debnewa & finnewa
                        set nb to nb - 1
                        set i to i - 1
                    end if
                 
                end if
                set i to i + 1
                set nb to count character of a
                if i = nb then exit repeat
            end repeat
         
         
         
            --verifie si parfum existe
            set AppleScript's text item delimiters to " "
            set nb to count text item of a
         
            set nom to ""
            repeat with i from 1 to nb
                set b to text item i of a
                set test to ASCII number (character 1 of b)
                if test < 65 then
                    if nom is not "" then
                        if nom is not in lesparfums then
                         
                            tell application "Finder"
                                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                                write ladate & " " & a & " le parfum : " & nom & " n'existe pas ! " & return to lelog starting at eof
                                close access lelog
                            end tell
                         
                        end if
                        set nom to ""
                    end if
                else
                    if nom is not "" then set nom to nom & " "
                    set nom to nom & text item i of a
                end if
            end repeat
         
         
            --prepare fichier evenements
            if c is not "" then
                set lefich to lefich & c & tab & a & " " & return
            end if
        end repeat
    end tell
end tell
--crée fichier evenements
tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "les evenements.txt") as text with write permission
    set eof lelog to 0
    write lefich to lelog starting at eof
    close access lelog
end tell

--ajout quantite par parfum
set vartoto to lefich
set nbparfums to count of lesparfums

set quantite to ""
repeat with nb from 1 to nbparfums
    set cherche to item nb of lesparfums
    set resultat to cherche & " = "
    set tourne to 0
    set bac to 0
    set litre to 0
    set AppleScript's text item delimiters to cherche
 
    set nb to count text item of vartoto
    try
        if nb > 1 then
            repeat with i from 2 to nb
                set trouve to text item i of vartoto
                set devant to text item (i - 1) of vartoto
             
                set nbdose to text -3 thru -1 of devant
                set AppleScript's text item delimiters to " "
             
                set ajout to text item 2 of trouve
             
                --traite les intermediaires (pulpe) sans cumuler les quantitiés
                if "*" is in ajout then
                    if nbdose is not number then
                        set avant to text -8 thru -1 of devant
                        if ":" is in avant then
                            set lafin to first paragraph of trouve
                            set AppleScript's text item delimiters to "*"
                            set nbbac to text item 1 of lafin
                            set lepoid to text item 2 of lafin
                            set quantite to quantite & cherche & " " & nbbac & " bacs de " & lepoid & " kg" & return
                         
                        end if
                    end if
                else
                 
                    set tourne to tourne + 1
                    set AppleScript's text item delimiters to "+"
                    set bac to bac + (nbdose * (text item 1 of ajout))
                    set litre to litre + (nbdose * (text item 2 of ajout))
                end if
             
                set AppleScript's text item delimiters to cherche
            end repeat
            if bac is not 0 then
                set quantite to quantite & cherche & "  " & tourne & " tournées " & bac & " bacs " & litre & " litres" & return
            end if
        end if
    on error
        set lelog to open for access ((path to desktop folder as text) & "Erreur traitement.txt") as text with write permission
        write "ERREUR ! Le parfum : " & cherche & " le " & i - 1 & " trouvé dans les evenements.txt" & return to lelog starting at eof
        close access lelog
    end try
 
end repeat

tell application "Finder"
    set lelog to open for access ((path to desktop folder as text) & "Quantites.txt") as text with write permission
    set eof lelog to 0
    write quantite to lelog starting at eof
    close access lelog
end tell

tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Dernière édition:
  • J’adore
Réactions: ambrine
Bonjour,
votre script est allé jusqu’au bout ! Mais bizarrement la vanille et le citron ne sortent pas dans le fichier quantité.

edit: j’ai trouvé le manque sur le citron. La vanille n’est pas dans la liste, je l’ai rajouté mais il ne le prend pas en compte sur un premier essai...

edit 2: la vanille sort en erreur mais elle est bien comptabilisée.

edit 3: est-il possible d’ignorer les événements qui ne sont pas sur la journée entière ? et d’ignorer les pulpes ?
 
Dernière édition:
Bonjour,

Mais pourtant l"analyse des 2 fichiers erreurs,
"les erreurs.txt" pour savoir quel parfum n'est pas dans la liste
et "Erreur traitement.txt" pour les évènements qui n'ont pas pu être traités suite à un problème de renseignements pas correct dans le calendrier,
Devrait te permettre de retrouver ces erreurs.

Attention de bien supprimer ces fichiers avant de faire une analyse, sinon il ajoute au fichier existant.

Pour trouver facilement l' évènement mal renseigné dans calendrier, il te donne le numéro de l'occurrence qui à provoqué l'erreur, il suffit de rechercher la énième occurrence dans le fichier évènement pour avoir la date ou est le problème.