Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Applescript: date und text item delimiters

Applescript: date und text item delimiters

gbkom16.06.2208:50
Hallo liebe Applescripter,

ich hab' gerade ein Brett vorm Kopp:
Für eine Regel in Apple Mail habe ich ein Applescript, das die Betreffzeile der Mail zerlegt und daraus eine Erinnerung erstellt.

Im Editor läuft die Routine problemlos. Sobald das Script von Mail aufgerufen wird, ist die date Berechnung fehlerhaft und das Script wird abgebrochen. Leider finde ich nirgends eine Fehlermeldung.

Als Ursache habe ich nach viel Probieren die AppleScript's text item delimiters gefunden. Sobald ich die verändere, funktioniert "date" nicht mehr. Im Script habe ich sie in "savedDelimiters" gesichert und stelle sie auch wieder her, trotzdem tritt der Fehler auf. Und wie gesagt, nur wenn der Aufruf über Mail erfolgt -- im Editor läuft alles fehlerfrei.

Wo ist mein Denkfehler, oder ist das ein Bug in AS?

Danke!
BG.gb

using terms from application "Mail"
    on perform mail action with messages these_messages for rule this_rule
        tell application "Mail"
            set the message_count to the count of these_messages
            repeat with i from 1 to the message_count
                set this_message to item i of these_messages
                
                if read status of this_message is false then
                    set my_subject to subject of this_message

                    -- Das sind Beispieltexte für my_subject:
                    -- Abfuhr schwarze Restmülltonne am 15.06.2022 ab 6 Uhr
                    -- Abfuhr blaue Papiertonne am 10.06.2022 ab 6 Uhr
                    -- Abfuhr grüne Biotonne am 08.06.2022 ab 6 Uhr
                    
-- dies ist eine Krücke, nicht was ich möchte. (Hiermit erstell ich ein date vom aktuellen Datum um 18.00 Uhr)
                    set my_date to current date
                    set null_time to time of my_date
                    set my_new_datum to my_date - null_time + 64800
-- Hier funktioniert die date Berechnung einwandfrei
                    
                    set savedDelimiters to AppleScript's text item delimiters
                    
-- Betreff der Mail zerlegen in "Abfuhr" und Datum
                    set AppleScript's text item delimiters to {" am "}
                    set my_text to first text item of my_subject
                    set my_datum to last text item of my_subject
                    
                    set AppleScript's text item delimiters to {" ab "}
                    set my_datum to first text item of my_datum
                    
                    set AppleScript's text item delimiters to {"."}
                    set my_tag to the first text item of my_datum
                    set my_monat to the second text item of my_datum
                    set my_jahr to the last text item of my_datum

                    set AppleScript's text item delimiters to savedDelimiters
                    
                    set my_datum to my_tag & "/" & my_monat & "/" & my_jahr
-- my_datum ist jetzt zB. "15/06/2022"
                    set my_new_datum to date my_datum
-- hier bricht das Script ab
                    
                    tell application "Reminders"
                        set newremin to make new reminder
                        set name of newremin to my_text 
                        set remind me date of newremin to my_new_datum
                    end tell
                    
                    set the read status of this_message to true
                    
                end if
            end repeat
        end tell
    end perform mail action with messages
end using terms from
0

Kommentare

udrabo
udrabo16.06.2218:34
Die Reihenfolge im Datum stimmt nicht: Das muss Monat / Tag / Jahr sein. Die amerikanische Schreibweise wird hier erwartet.

Die Zeile muss also heißen:
set my_datum to my_monat & "/" & my_tag & "/" & my_jahr

__
Ergänzung: Wenn’s im Editor funktioniert hat, dann weil Du zum Testen ein Datum verwendet hast, welches zufällig in das Schema passt: wie z. B. 12/06/2022.
+1
mactelge
mactelge16.06.2219:43
Alternativ könnte man auch den Abfallkalender, vorn mit dem ersten, hinten mit dem zweiten Halbjahr der Abfuhrtermine bedruckt, welchen die Gemeinde am Anfang des Mülljahres in den Briefkasten steckt, verwenden.

Hoffentlich kann das Problem noch vor dem nächsten Abfuhrtermin gelöst werden!

„Dreh´dich um – bleib´wie du bist – dann hast du Rückenwind im Gesicht!“
0
gbkom17.06.2208:38
@udrabo
Leider nicht, es wird die Systemeinstellung benutzt (womit solche Scripts nicht überall anwendbar sind):
set my_datum to "20/10/2022"
set my_new_datum to (date my_datum)
display dialog ("Datum: " & my_datum & return & "NewDatum: " & my_new_datum)
ergibt
Datum: 20/10/2022
NewDatum: Donnerstag, 20. Oktober 2022 um 00:00:00

@macteige
Danke für den großartigen Tip!
0
marm17.06.2209:02
Kannst du nicht mit dem Script die Betreffzeile abrufen und an Kurzbefehle weiterreichen und verarbeiten?

0
gbkom17.06.2209:06
@marm
Ja, an Kurzbefehle hatte ich auch schon gedacht -- aber mich nervt einfach, dass es im Editor funktioniert und über Mail nicht. Ehrgeiz und so...
0
ttwm17.06.2211:22
date "15/06/2022" funktioniert in dem Fall nicht. Das würde nur gehen, wenn es bei der Übersetzung schon so da stehen würde - dann wird es nämlich automatisch in den korrekten String umgewandelt.

Warum nimmst Du nicht den Ansatz aus der Krücke her und machst das gleiche weiter unten?

Also statt:
set my_datum to my_tag & "/" & my_monat & "/" & my_jahr
set my_new_datum to date my_datum
dann
set my_Datum to current date
set the day of my_Datum to my_tag
set the month of my_Datum to my_monat
set the year of my_Datum to my_jahr
set the time of my_Datum to 0
+1
Michael Schmidt
Michael Schmidt17.06.2211:22
Hi, hast du schon
set my_datum to (my_tag & "/" & my_monat & "/" & my_jahr) as text
probiert? Nicht, dass er eine Liste daraus macht...

LG
Schmiddl
„Trautman: "Er wird kommen und er wird mich hier rausholen." Russischer Offizier: "Was, glaubt dieser Mann, wer er ist? Gott?" Trautman: "Nein, Gott kennt Gnade!"“
0
gbkom17.06.2215:24
@ttwm
Toll! Das funktioniert! Danke!

Schade, dass date nicht das tut, was im AppleScript Language Guide steht:
date "7/16/70"
--result: date "Wednesday, July 16, 2070 12:00:00 AM"

@Michael Schmidt
ja, alle Variationen ausprobiert -- es funktioniert nur im Editor. Weder in Mail noch in Erinnerungen funktioniert date.
0
MikeMuc17.06.2217:30
gbkom
Es könnte sein, das du bei „date“ explizit „System events“oder ähnlich ansprechen muß. Bin am iPad, kann daher grad nicht genau sagen „wer da genau“ zuständig ist. wenn Mail den Befehl „durchreichen“ muß, weil es ihn nicht selber kennt, gibt es im Scripteditor ein anders Verhalten als in dem Fall, wo das Script im reinen Kontext einer Anwendung wie Mail läuft.
0
ttwm17.06.2218:18
gbkom
Schade, dass date nicht das tut, was im AppleScript Language Guide steht:
date "7/16/70"
--result: date "Wednesday, July 16, 2070 12:00:00 AM"
Doch, es tut leider genau das, was im Guide steht (es ist nur nicht auf den ersten Blick ersichtlich bzw. verständlich formuliert):
The following expressions show some options for specifying a date, along with the results of compiling the statements.
Letzter Teil (along with …) bringt leider unverständlich zum Ausdruck, das dein Code nur beim erstmaligen Übersetzen (und nicht variabel während der Laufzeit) korrekt angepasst/übersetzt wird. Aus dem Grund ranken sich um date allerlei Lösungen (und Hass-Lieben), viele greifen dann sogar auf Terminal-Scripts zurück…
+1
gbkom17.06.2218:36
Beim Terminal war ich auch schon angekommen...
Aber die zitierte "Erklärung" muss man wirklich mehrfach lesen und dann interpretieren.
Danke noch Mal!
0
ttwm17.06.2218:44
Gerne doch
0
ttwm18.06.2214:53
udrabo
Die Reihenfolge im Datum stimmt nicht: Das muss Monat / Tag / Jahr sein. Die amerikanische Schreibweise wird hier erwartet.
Das ist leider falsch und auch keine Daumen hoch wert.
0
ttwm18.06.2214:57
mactelge
Alternativ könnte man auch den Abfallkalender, vorn mit dem ersten, hinten mit dem zweiten Halbjahr der Abfuhrtermine bedruckt, welchen die Gemeinde am Anfang des Mülljahres in den Briefkasten steckt, verwenden.

Hoffentlich kann das Problem noch vor dem nächsten Abfuhrtermin gelöst werden!

Abgesehen davon, dass es die gedruckte Version zum Bleistift bei uns nicht mehr gibt – wie teilst du uns dann mit, dass sich die Termine übers Jahr mal wieder ändern (was bei uns wegen Ferien – die sind ja nicht vorher bekannt… –, Feiern oder Baustellen ca. 15x im Jahr ist).
0
udrabo
udrabo18.06.2215:29
ttwm
udrabo
Die Reihenfolge im Datum stimmt nicht: Das muss Monat / Tag / Jahr sein. Die amerikanische Schreibweise wird hier erwartet.
Das ist leider falsch und auch keine Daumen hoch wert.
Ich habe inzwischen auch bemerkt, dass ich mich geirrt hatte – und vermutlich jeder andere auch, der den Thread gelesen hat. Aber danke für den verdeutlichenden Hinweis. Ich hatte mich von der Schreibweise mit „/“ irritieren lassen.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.