0 votes

Le sous-programme de remplacement Applescript ne fonctionne pas avec '@'

Je essaie de substituer une adresse électronique par un caractère symbolique dans un bloc de texte.

Le bloc de texte :

Cher %%FirstName%%-
... 
Ce message a été envoyé à %%EmailAddress%%.

Le script :

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

Procédure de remplacement (AppleScript: Sous-routines essentielles) :

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

Le résultat :

Cher First-
... 
Ce message a été envoyé à .

Si je change le script à :

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

Le résultat :

Cher First-
... 
Ce message a été envoyé à first.lastATcompany.com.

Quel est le problème avec la procédure de remplacement?

** éditer **

Je collecte une liste distincte d'adresses électroniques à partir d'un contact Outlook :

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

Ensuite, en utilisant la liste :

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

1voto

J'ai essayé d'exécuter le premier exemple :

set theBody to "Cher %%FirstName%%-
... 
Ce message a été envoyé à %%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 text item delimiters to the search_string
    set the item_list to every text item of this_text
    set text item delimiters to the replacement_string
    set this_text to the item_list as string
    set text item delimiters to ""
    return this_text
end replace

Le résultat était :

Cher First-
... 
Ce message a été envoyé à first.last@company.com.

Donc il semble fonctionner correctement. Le replace handler ne devrait pas avoir de problèmes avec les chaînes de caractères qui contiennent des caractères spéciaux, donc il se peut que vous manquiez quelque chose d'autre.

En outre, restaurer les délimiteurs d'éléments de texte n'est pas nécessaire autant que je sache, et vous n'avez pas besoin d'utiliser AppleScript's en dehors des blocs tell, donc le replace handler peut être simplifié à quelque chose comme ceci :

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X