Ejecutando el siguiente código de AppleScript en el Editor de AppleScript:
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 la siguiente salida en el registro de eventos del editor de AppleScript:
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
En los ejemplos anteriores, he definido los separadores de campo (delimitadores) en awk
usando la opción -F
como ' at | am | pm '
que equivale a "en "," am "y" pm "e imprime '{print $2}'
lo que hay entre los separadores de campo .
Nota: el uso del comando log
no es necesario para la codificación de la respuesta y se usa solo para mostrar cuál es el valor de theTime
contiene para la salida del registro de eventos, aparte de lo que se muestra después de -->
, que es el resultado como se muestra normalmente en el registro de eventos.
Actualización: escribí mi respuesta original basada en una interpretación literal que decía, " Por lo tanto, me gustaría que el delimitador del elemento de texto inicial fuera at_
y el delimitador del elemento de texto de cierre sea _pm
o _am
", lo que se buscaba era usarlos literalmente como delimitadores. Sin embargo, como se presentó una solución diferente que utiliza puro código de AppleScript, en una respuesta por separado, permítanme presentarles una solución AppleScript código de una línea hace lo mismo que hacen las 8 líneas de pure código de AppleScript y al centrarse en dos puntos , pero como parte de un RegEx representación del tiempo en horas y minutos.
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
Ejecutando el siguiente código de AppleScript en el Editor de AppleScript:
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 la siguiente salida en el registro de eventos del editor de AppleScript:
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
Como puede ver, si hay o no uno o dos números que preceden a los dos puntos, RegEx coincide y el awk
programa devuelve la coincidencia deseada, de la cual es la hora.
Personalmente, elegiría usar este método en particular sobre mi respuesta original, ya que es un método mejor en estas circunstancias, o sobre el pure AppleScript code como No puedo justificar la escritura de 8 líneas de puro código de AppleScript cuando una sola línea de regular AppleScript código produce el ¡Los mismos resultados que hacen las 8 líneas!