Exemplo:
set theText to "I ate an apple at 11:54 pm without the skin."
Eu gostaria theTime
de ser uma string que contém o texto:11:54
Portanto, gostaria que o delimitador do item de texto de abertura fosse at_
e o delimitador do item de texto de fechamento fosse um _pm
ou outro _am
, dependendo do período existente na string. (Observação - todas as instâncias de um sublinhado nesta postagem representam um espaço porque não consigo representar um espaço na formatação do código do Stack Exchange.)
O conteúdo de theText
variará bastante. Por exemplo, pode ser:
set theText to "I ate two navel oranges at 6:30 am with a glass of water."
Mas o formato da hora sempre permanecerá constante. O horário sempre será precedido por um "at" e esse "at" será sempre a primeira instância de um "at" na string. Da mesma forma, o tempo será necessariamente seguido por "sou" ou "pm".
fonte
theText
string, o que desorientaria um método de obtenção baseado em dois pontostheTime
.Respostas:
Executando o seguinte código AppleScript no AppleScript Editor:
Produz a seguinte saída no log de eventos do AppleScript Editor:
Nos exemplos acima eu defini os separadores de campo (delimitadores) em
awk
utilizando a-F
opção como' at | am | pm '
o que equivale a "at", "am" e "pm" e imprime'{print $2}'
o que há entre os separadores de campo .Nota: O uso do
log
comando não é necessário para a codificação da resposta e está sendo usado apenas para mostrar qual o valor detheTime
para a saída do Log de Eventos, além do que é mostrado a seguir-->
, que é o resultado normalmente mostrado no Log de Eventos .Atualização: eu escrevi minha resposta original com base em uma interpretação literal, quando disse: " Então, eu gostaria que o delimitador de item de texto de abertura fosse
at_
e o delimitador de item de texto de fechamento fosse um_pm
ou outro_am
", o que se queria era usar literalmente aqueles como os delimitadores. No entanto, como uma solução diferente usando código AppleScript puro , em uma resposta separada, foi apresentada, deixe-me apresentar uma solução de código AppleScript de uma linha que faz a mesma coisa que as 8 linhas de código AppleScript puro e com foco nos dois pontos , mas como parte de uma representação RegEx do tempo em horas e minutos.Executando o seguinte código AppleScript no AppleScript Editor:
Produz a seguinte saída no log de eventos do AppleScript Editor:
Como você pode ver, se há um ou dois números precedendo os dois pontos, o RegEx corresponde e o
awk
programa retorna a correspondência desejada, sendo a hora atual.Pessoalmente, eu escolheria usar esse método específico sobre minha resposta original, pois é um método melhor nessas circunstâncias e ou sobre o código AppleScript puro , pois não posso justificar a escrita de 8 linhas de código AppleScript puro quando uma única linha de código AppleScript normal produz os mesmos resultados que as 8 linhas!
fonte
Você pode fazer isso com AppleScript puro, mesmo que o método de script de shell apresentado acima seja muito bom:
fonte
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
produz os mesmos resultados em uma linha de código AppleScript comum que leva 8 linhas do seu código AppleScript puro para fazer, não acredito que jamais usaria seu método No entanto, eu o adicionei ao meu arquivo de trechos de código para ter um exemplo do fluxo lógico, caso eu encontre um motivo convincente para usá-lo em uma solução.awk