
Recherche et remplacement simples
Le langage de script de JMP, JSL, peut stocker des nombres, des chaînes et d'autres objets dans des variables. Une affectation de chaîne pourrait ressembler à ceci :
place = "Cary, North Carolina, USA";
la variable lieu détient maintenant la chaîne. Voici un ensemble de fonctions pour travailler avec des chaînes en JSL.Lieu conservera cette même chaîne dans tous les exemples. Regex et Pattern Matching sont abordés dans des articles ultérieurs.
Enchaînement - mettre deux ficelles ensemble, bout à bout. Ou plus de deux...
sentence = "My home is " || place || ".";
"Je vis à Cary, en Caroline du Nord, aux États-Unis."
Longueur - combien de caractères y a-t-il dans la chaîne ?
Write( place, " ", Length( place ) );
Cary, Caroline du Nord, États-Unis 25
Contient - quelle partie de la chaîne contient ce texte ?
positionA = Contains( place, "," );
positionB = Contains( place, ",", 1 + positionA );
Show( positionA, positionB );
positionA = 5 ;
positionB = 21 ;
Remarquez comment la positionB est trouvée en commençant un caractère après la positionA. Sinon, la première virgule en position A serait retrouvée. Contient renvoie une position de 0 si la recherche échoue, ce qui rend si( contient(...), ... ) fonctionne bien.
Sous-titre - une partie de la chaîne, commençant à une position, sur une longueur.
state = Substr( place, 1 + positionA, positionB - (1 + positionA) );
" Caroline du Nord"
Notez également l'espace après la capture de la première virgule. Si vous omettez l'argument de longueur, substr va à la fin. Il existe également une règle pour une position de départ négative :
Substr( place, -3, 2 );
"NOUS"
-3 signifie commencer à 3 caractères de la fin.
Garniture - supprimez ces satanés blancs
state = trim( state, "left" ); // or "right" or "both"
"Caroline du Nord"
Gauche - un certain nombre de caractères à partir de l'extrémité gauche (avant) de la chaîne
Left( place, positionA - 1 );
"Cary"
positionA vaut 5, la position de la première virgule ; "Cary" correspond aux 4 caractères avant la virgule. Il existe un troisième argument pour le texte de remplissage :
Left( "abc", 15, "@#$*" );<BR />
"abc@#$*@#$*@#$*"
Remarquez à quel point le texte de remplissage est ajouté pour fournir les 15 caractères demandés à gauche de « abc ». L'espace pourrait être un meilleur choix de remplissage. Sans le remplissage, le résultat est simplement "abc".
Droite - un certain nombre de caractères à partir de l'extrémité droite (arrière) de la chaîne
Right( place, 3 ); // like Left, there is a fill option
"ETATS-UNIS"
Utilisez Substr au lieu de right si vous avez un poste
Substr( place, positionB + 2 ); // +2 goes past the comma and the space
"ETATS-UNIS"
Substr ne nécessite pas de troisième valeur pour la longueur ; ça ira jusqu'au bout.
Toi pourrait utilisez Right avec une position et la fonction Longueur, mais au moment où vous aurez expliqué comment soustraire une position d'une longueur, ce sera plus compliqué.
Munger - homme à tout faire...
Munger munges cherche et remplace ensemble. Ce n'est pas aussi intelligent ni aussi connu que Regex, mais il est plus facile à comprendre une fois que vous l'avez compris. Personne d'autre ne sera en mesure de comprendre ce que fait votre JSL sans manuel, vous souhaiterez donc peut-être l'ignorer.
result = Munger( source, startPosition, textOrLength, optionalReplacementText );
Voici un tableau qui tente d'expliquer les différentes combinaisons de textOrLength et optionnelReplacementText. Tous les exemples utilisent 3 pour la position de départ, en sautant le "ab" initial. Notez le quatrième exemple trouvant le deuxième « b ».
| |
pas de remplacement |
texte de remplacement = "$*?" |
| Munger("abcabc", 3, 2, ? ) |
"Californie" |
"ab$*?bc" |
| Munger("abcabc", 3, 0, ?) |
"" |
"ab$*?cabc" |
| Munger("abcabc", 3, 99, ?) |
"cab" |
"Ab$*?" |
| |
|
|
| Munger("abcabc", 3, "b", ?) |
5 |
"abca$*?c" |
| Munger("abcabc", 3, "Q", ?) |
0 |
"abcabc" |
| Munger("abcabc", 3, "", ?) |
0 |
"abcabc" |
Si vous le regardez assez longtemps, tous les résultats sont utile de manière cohérente. S'il n'y a pas de texte à trouver, juste une longueur, Munger renvoie la sous-chaîne. S'il y a du texte de remplacement, il renvoie l'original avec la sous-chaîne remplacée. Mais s'il y a du texte à trouver, il n'y a aucune raison de renvoyer le texte trouvé, donc s'il n'y a pas de texte de remplacement, vous obtiendrez la position du texte trouvé. S'il y a du texte de remplacement, vous obtiendrez la chaîne d'origine avec la sous-chaîne remplacée. Le cas impair est la dernière ligne, qui peut ou non répondre à vos attentes pour trouver une chaîne vide. N'utilisez pas non plus de positions et de longueurs négatives. Ils n'ajouteront aucune clarté ici et ne fonctionneront pas comme substr().
Exemple
Les formules de colonne du tableau de données peuvent calculer une valeur à partir d'une autre colonne. Voici un exemple « nom, prénom » qui suppose que la virgule est un délimiteur unique. Cet exemple fonctionne pour le cas "onlyname" en raison de la façon dont Left interprète toute longueur hors plage comme tout. Recherchez le message Regex, vous l'aimerez peut-être mieux.
Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()Formule de colonne utilisant Left() et Contains()
Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()Formule de colonne utilisant substr() et contain()
modifier le 30 septembre 2017 : réparer le formatage