10
votes

AppleScript: Index de la sous-chaîne dans la chaîne

Je veux créer une fonction qui renvoie une sous-chaîne d'une chaîne spécifique du début de ladite chaîne jusqu'à mais non compris le début d'une autre chaîne spécifique. Idées?


alors quelque chose comme: xxx

donc si j'invite Substrupto ("aujourd'hui est mon anniversaire", "mon") , cela rendrait une sous-chaîne du premier argument à la hauteur, mais sans inclure où le deuxième argument commence. (C'est-à-dire, il retournerait "aujourd'hui est" )


0 commentaires

3 Réponses :


0
votes

Probablement un peu Kludgey, mais cela fait du travail ... XXX


0 commentaires

13
votes
set s to "Today is my birthday"
set AppleScript's text item delimiters to "my"
text item 1 of s
--> "Today is "

2 commentaires

Il convient probablement de noter que la meilleure pratique est que les délimiteurs d'élément de texte doivent être réinitialisés à une chaîne vide comme étant immédiatement après cela pour éviter toute éventuelle erreurs étranges plus tard.


La meilleure pratique consiste toujours à définir les TID à une valeur appropriée immédiatement avant d'utiliser des délimiteurs d'élément de texte ou des coercitions de texte (à la fois implicites et explicites). C'est le seul moyen d'être sûr que votre code n'est pas sensible aux erreurs (c'est-à-dire une programmation défensive). La pratique polie consiste à stocker les TID existantes dans une variable temporaire, puis les restaurer une fois que vous avez terminé (c'est-à-dire la propriété globale des «délimiteurs de texte de texte» dans l'état que vous avez trouvé). Il est sage de le faire dans les gestionnaires, au cas où la ligne de code qui appelle le gestionnaire fait quelque chose qui implique des TID immédiatement après.



7
votes

L'intégré décalse code> doit le faire:

set s to "Today is my birthday"
log text 1 thru ((offset of "my" in s) - 1) of s
--> "Today is "


0 commentaires