1 votos

El subprocedimiento Replace de Applescript no funciona con '@'

Intento sustituir una dirección de correo electrónico por un carácter simbólico en un bloque de texto.

El bloque de texto:

Dear %%FirstName%%-
... 
This message was sent to %%EmailAddress%%.

El script:

...
set theBody to my replace(theBody, "%%FirstName%%", "First")
set theBody to my replace(theBody, "%%EmailAddress%%", "first.last@company.com")
...

Sustituir el subprocedimiento ( AppleScript: Sub-rutinas esenciales ):

on replace(this_text, search_string, replacement_string)

    set AppleScript's text item delimiters to the search_string
    set the item_list to every text item of this_text
    set AppleScript's text item delimiters to the replacement_string
    set this_text to the item_list as string
    set AppleScript's text item delimiters to ""
    return this_text

end replace

El resultado:

Dear First-
... 
This message was sent to .

Si cambio el script por:

...
set theBody to my replace(theBody, "%%FirstName%%", "First")
set theBody to my replace(theBody, "%%EmailAddress%%", "first.lastATcompany.com")

El resultado:

Dear First-
... 
This message was sent to first.lastATcompany.com.

¿Qué pasa con el replace ¿subprocedimiento?

** editar **

Estoy recopilando una lista distinta de direcciones de correo electrónico de un contacto de Outlook:

...
set theAddresses to email addresses of theContact
set addressList to {}
repeat with theAddress in the theAddresses
  if addressList does not contain (address of theAddress) then
    set addressList to addressList & (address of theAddress)
  end if
end repeat
...

Entonces, usando la lista:

...
repeat with theAddress in addressList
  ...
  make new recipient at newMessage with properties {email address:{name:displayName of theContact, address:theAddress}}
  ...
end repeat
...

1voto

He intentado ejecutar el primer ejemplo:

set theBody to "Dear %%FirstName%%-
... 
This message was sent to %%EmailAddress%%."

set theBody to my replace(theBody, "%%FirstName%%", "First")
set theBody to my replace(theBody, "%%EmailAddress%%", "first.last@company.com")

on replace(this_text, search_string, replacement_string)
    set AppleScript's text item delimiters to the search_string
    set the item_list to every text item of this_text
    set AppleScript's text item delimiters to the replacement_string
    set this_text to the item_list as string
    set AppleScript's text item delimiters to ""
    return this_text
end replace

El resultado fue:

Dear First-
... 
This message was sent to first.last@company.com.

Así que parecía funcionar bien. El replace no debería tener ningún problema con las cadenas que contienen caracteres especiales, así que puede que haya algo más que se te escape.

También no es necesario restaurar los delimitadores de los elementos de texto que yo sepa, y no es necesario AppleScript's fuera de los bloques de tell, por lo que el replace se puede simplificar a algo como esto:

on replace(input, x, y)
    set text item delimiters to x
    set ti to text items of input
    set text item delimiters to y
    ti as text
end replace

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X