Il suffit de regarder la liste des fonctions de personnage disponibles dans le JMP Éditeur de formule.

Non pas que quiconque compte, mais cela fait 42 fonctions ! Inutile de dire que si vous avez une colonne de caractères et que vous souhaitez la modifier d'une manière ou d'une autre, JMP a probablement une fonction pour le faire à votre place.
Notez cependant que neuf de ces fonctions concernent toutes – ou principalement – l’extraction d’une partie de la valeur d’un caractère. Certes, il s’agit de l’une des opérations les plus courantes : extraire une partie d’une chaîne de caractères plus grande. C'est ce qu'on appelle une sous-chaîne.
La fonction la plus évidente est la Substr() fonction, mais cette fonction nécessite que vous sachiez exactement où se trouve la partie qui vous intéresse dans la plus grande chaîne. Cela signifie également que la partie souhaitée doit être au même endroit dans chaque chaîne.
C'est pourquoi j'aime le Mot() fonction. C'est incroyablement flexible et fonctionne comme je le pense.
Le Mot() la fonction prend deux arguments obligatoires et un facultatif.
Mot(n, "texte", <"délimiteurs">)
Le Mot() la fonction divise le texte en mots basés sur le délimiteurs vous avez spécifié et renvoie le n ème mot. Si vous ne précisez pas le délimiteurs argument, alors le délimiteur par défaut est le même que celui que nous utilisons pour séparer les mots dans les phrases : un espace.
À titre d'exemple, considérons la colonne de jours suivante :
| Jour |
|---|
| 6 décembre |
| 16 décembre |
| 28 septembre |
| 19 mai |
| 29 septembre |
| 11 septembre |
| 14 mars |
| 13 novembre |
| 27 octobre |
| 7 janvier |
Séparer les mois est facile avec le Mot() fonction. Vous voulez juste le premier mot de chaque chaîne.
Mot( 1, Jour )
| Mois |
|---|
| Décembre |
| Décembre |
| Septembre |
| Peut |
| Septembre |
| Septembre |
| Mars |
| Novembre |
| Octobre |
| Janvier |
Cela fonctionne bien dans de nombreux cas, mais le véritable pouvoir vient lorsque vous pensez à utiliser d'autres caractères comme délimiteurs pour diviser une chaîne en « mots ».
Voici une autre liste. Ce sont des emplacements. Cette fois, la latitude et la longitude sont intégrées dans la chaîne derrière le nom de la ville.
| Emplacement |
|---|
| 1600 NEW BERN AVE Raleigh, Caroline du Nord [35.779892815000494, -78.61572674699966] |
| 3800 NEW BERN AVE Raleigh, Caroline du Nord [35.79777009600048, -78.57633099599968] |
| 3200 CAPITAL BLVD Raleigh, Caroline du Nord [35.822875239000496, -78.58848179699964] |
| 700 VARDAMAN ST Raleigh, Caroline du Nord [35.77016025800049, -78.61995064499968] |
| 2900 BASSWOOD DR Raleigh, Caroline du Nord [35.74121031600049, -78.60477047599966] |
| 1300 CURFMAN ST Raleigh, Caroline du Nord [35.76619700500049, -78.65143264899967] |
| 8500 SWARTHMORE DR Raleigh, Caroline du Nord [35.89068092800045, -78.60012101699965] |
| 1200 CANYON ROCK CT Raleigh, Caroline du Nord [35.76156160400046, -78.55683519199965] |
| 800 GREENWICH ST Raleigh, Caroline du Nord [35.768321829000456, -78.59393748999963] |
| 300 ROSELLE CT Raleigh, Caroline du Nord [35.788000157000454, -78.58367178499964] |
Il serait utile d'avoir la latitude et la longitude dans une autre colonne.
Si vous considérez les crochets comme des délimiteurs, c’est assez simple. Vous voulez juste le deuxième « mot ».
Mot(2, Emplacement, "[]")
Vous avez maintenant une colonne (LatLong) de chaînes dont la latitude et la longitude sont séparées par une virgule et un espace.
| LatLong |
|---|
| 35.779892815000494, -78.61572674699966 |
| 35.79777009600048, -78.57633099599968 |
| 35.822875239000496, -78.58848179699964 |
| 35.77016025800049, -78.61995064499968 |
| 35.74121031600049, -78.60477047599966 |
| 35.76619700500049, -78.65143264899967 |
| 35.89068092800045, -78.60012101699965 |
| 35.76156160400046, -78.55683519199965 |
Le Mot() la fonction vient à nouveau à la rescousse. Cette fois, nous souhaitons utiliser la virgule et l’espace comme délimiteurs. Si nous utilisons uniquement une virgule, alors la chaîne de longitude aura un espace au début. L'utilisation des deux délimiteurs nous donne des chaînes sans espace.
Latitude
Mot(1, LatLong, ", ")
Longitude
Mot(2, LatLong, ", ")
Ceux-ci doivent être nettoyés davantage en les convertissant en nombres à l'aide du Nombre() fonction, mais c'est un exercice pour un autre post.
La clé pour profiter de Mot() La fonction consiste à visualiser vos chaînes comme des "phrases" et à réfléchir de manière abstraite au choix des délimiteurs.
Voici un dernier exemple. Supposons que vous ayez une colonne de numéros de lot (LotNo) avec un nom intégré au milieu :
| Numéro de lot |
|---|
| A30941ALTE69073172 |
| A82886ILEAK51521781 |
| A54715XSURVXC88997379 |
| A7860BATTBC97523479 |
| A79004ILEAK52159080 |
| A59508ABAEG58962051 |
| A44172ILEAK28255713 |
| A21319XSURVXC88014800 |
| A58308BATTBC49519851 |
| A19412C83938451 |
C'est difficile car le nom n'apparaît pas à la même position dans la chaîne de chaque ligne. Si vous pensez aux nombres de la même manière que vous pensez aux espaces lors de la lecture, alors le nom devient le « deuxième » mot.
Mot (2, numéro de lot, "0123456789")
| NOM |
|---|
| ALTÉ |
| ILEAK |
| XSURVXC |
| BATTBC |
| ILEAK |
| ABAEG |
| ILEAK |
| XSURVXC |
| BATTBC |
| C |
Si vous avez le temps d'apprendre une seule des 42 fonctions de caractères de l'éditeur de formules, je commencerais par la Mot() fonction.
Très utile.
Merci d'avoir privilégié celui-ci par rapport à tous les autres... !
Yee-Seng Lee a écrit:
Merci beaucoup. Cela fonctionne parfaitement !
Jeff Perkinson a écrit:
Essaie le Article() fonction à la place. C'est comme Word() sauf qu'il traite plusieurs délimiteurs comme définissant chacun un nouvel élément.
Yee-Seng Lee a écrit:
Salut Jeff,
Si j'avais une chaîne = "1*2*3**5***8" où elle est destinée à être divisée en 8 colonnes distinctes au lieu de 5, ce qui signifie que le double ** doit être considéré comme une colonne avec des données vides , alors que triple *** doit être considéré comme deux colonnes avec des données vides, ainsi de suite, une solution de contournement avec la fonction Word ?
Jeff Perkinson a écrit:
Merci, Paul. J'ai mis à jour le message pour corriger ce tableau.
Paul Savarèse a écrit:
Jeff : J'ai apprécié votre article sur la fonction WORD, mais j'ai été un peu confus par le dernier exemple. Il semble que quelque chose ne va pas. Le premier numéro de lot est A30941ALTE69073172 et le « mot » intégré est, apparemment, ALTE, mais le mot (2, numéro de lot, « 0123456789 ») est affiché comme renvoyant la valeur « C » ? En outre, certains des autres numéros de lot contenaient les mots « XSURVX », mais aucun des résultats n'a montré que cela avait été sélectionné. De plus, je n'ai vu le mot « VOLT » intégré dans aucun des numéros de lot, mais il apparaît comme le résultat de la fonction WORD à deux reprises ?
Merci,
Paul S.