Ejecutando el siguiente AppleScript código 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 el separadores de campo (delimitadores) en awk
utilizando el -F
opción como ' at | am | pm '
que equivale a " at ", " am " y " pm " e imprime '{print $2}'
lo que hay entre el separadores de campo .
Nota: El uso del log
comando no es necesario para la codificación de la respuesta y se utiliza sólo para mostrar lo que 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 normalmente se muestra en el registro de eventos.
Actualización: Escribí mi respuesta original basándome en una interpretación literal, en el sentido de que al decir " Por lo tanto, me gustaría que el delimitador del elemento de texto de apertura fuera `aty el delimitador del elemento de texto de cierre debe ser
_pmo
am` ", lo que se quería era utilizar literalmente esos como delimitadores. Sin embargo, ya que una solución diferente utilizando puro AppleScript código en una respuesta separada, permítame presentar un AppleScript de una línea código que hace lo mismo que las 8 líneas de puro AppleScript código y centrándose en la colon 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 AppleScript código 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, tanto si hay uno o dos números precediendo a los dos puntos, el RegEx coincide y el awk
programa devuelve la coincidencia deseada, siendo la hora.
Personalmente, elegiría usar este método en particular sobre mi respuesta original, ya que es un método mejor dadas las circunstancias, y o sobre el puro AppleScript código ya que no puedo justificar el escribir 8 líneas de puro AppleScript código cuando una sola línea de regular AppleScript código produce los mismos resultados que las 8 líneas.
0 votos
He actualizado mi respuesta original para incluir un espacio antes de y después de los tres separadores de campo (delimitadores) " at ", " am " y " pm " ya que tiene más sentido hacerlo y no un solo espacio como se escribió originalmente.
0 votos
He vuelto a actualizar mi respuesta para mostrar cómo una sola línea de regular AppleScript código hace lo que las 8 líneas de puro AppleScript código hace en la otra respuesta.
0 votos
Bien, gracias. Sin embargo, me he dado cuenta de que, en realidad, prefiero tu solución original porque es más restrictiva, ya que responde exactamente a mi pregunta original con una interpretación literal (como has señalado). En general, me gusta hacer la menor cantidad de suposiciones posibles cuando escribo código, para ser conservador. Aunque no sea común o esperado, los dos puntos podrían existir antes del tiempo en
theText
cadena, lo que desorientaría un método basado en dos puntos para obtenertheTime
.