In esecuzione il seguente codice AppleScript in AppleScript Editor:
set theText to "I ate an apple at 11:54 pm without the skin."
set theTime to do shell script "awk -F ' at | am | pm ' '{print $2}'<<<" & quoted form of theText
log "The time was: " & theTime
set theText to "I ate two navel oranges at 6:30 am with a glass of water."
set theTime to do shell script "awk -F ' at | am | pm ' '{print $2}'<<<" & quoted form of theText
log "The time was: " & theTime
Produce il seguente output nel registro eventi di AppleScript Editor:
tell current application
do shell script "awk -F ' at | am | pm ' '{print $2}'<<<'I ate an apple at 11:54 pm without the skin.'"
--> "11:54"
(*The time was: 11:54*)
do shell script "awk -F ' at | am | pm ' '{print $2}'<<<'I ate two navel oranges at 6:30 am with a glass of water.'"
--> "6:30"
(*The time was: 6:30*)
end tell
Negli esempi precedenti ho definito i separatori di campi (delimitatori) in awk
usando l'opzione -F
come ' at | am | pm '
che equivale a "a "," am "e" pm "e stampa '{print $2}'
cosa c'è tra i separatori di campi .
Nota: l'uso del comando log
non è necessario per la codifica della risposta e viene utilizzato solo per mostrare quale sia il valore di theTime
contiene per l'output del registro eventi a parte ciò che viene mostrato dopo -->
, che è il risultato come normalmente mostrato nel registro eventi.
Aggiornamento: ho scritto la mia risposta originale sulla base di un'interpretazione letterale in cui, quando detto, " quindi, vorrei che il delimitatore di testo di apertura fosse at_
e il delimitatore di testo di chiusura fosse o _pm
o _am
", quello che volevo era usare letteralmente quelli come delimitatori. Tuttavia, poiché è stata presentata una soluzione diversa che utilizza puro codice AppleScript , in una risposta separata, mi permetta di presentare una soluzione code di AppleScript su una riga fa la stessa cosa che fanno le 8 linee del puro codice AppleScript e concentrandosi sui due punti , ma come parte di un Rappresentazione di RegEx del tempo in ore e minuti.
set theTime to do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<" & quoted form of theText
In esecuzione il seguente codice AppleScript in AppleScript Editor:
set theText to "I ate an apple at 11:54 pm without the skin."
set theTime to do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<" & quoted form of theText
set theText to "I ate two navel oranges at 6:30 am with a glass of water."
set theTime to do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<" & quoted form of theText
Produce il seguente output nel registro eventi di AppleScript Editor:
tell current application
do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<'I ate an apple at 11:54 pm without the skin.'"
--> "11:54"
do shell script "awk 'match($0,/[0-9]{1,2}:[0-5][0-9]/) {print substr($0,RSTART,RLENGTH)}'<<<'I ate two navel oranges at 6:30 am with a glass of water.'"
--> "6:30"
end tell
Come puoi vedere, indipendentemente dal fatto che ci siano o meno da uno a due numeri prima dei due punti, la RegEx corrisponde e il awk
programma restituisce la corrispondenza desiderata, di cui è il momento.
Personalmente, sceglierei di utilizzare questo particolare metodo rispetto alla mia risposta originale, in quanto è un metodo migliore in queste circostanze e o sopra il puro codice AppleScript come Non riesco a giustificare la scrittura di 8 righe di pure codice AppleScript quando una singola riga di regolare codice AppleScript produce il stessi risultati delle 8 linee!