MNTGETTOK : Extraire les jetons d'une fonction de chaîne

Comment :

La fonction MNTGETTOK divise une chaîne de caractères en sous-chaînes, appelés jetons. De façon à utiliser MNTGETTOK, la données doit avoir un caractère spécifique appelé délimiteur, qui est présent dans la chaîne et sépare la chaîne en jetons. MNTGETTOK renvoie le jeton spécifié par l'argument token_number.

Par exemple, vous pouvez utiliser MNTGETTOK pour extraire les valeurs individuelles d'une liste délimitée par deux points, en désignant les deux points comme délimiteur.

Pour utiliser cette fonction, vous devez importer la bibliothèque de fonctions MNTUWS.

Remarque :


Haut de page

x
Syntaxe : Extraire une sous-chaîne (jeton)
Module Import(mntuws)
MNTGETTOK(infield,"delim",token_number)

où :

infield

Alphanumérique

est le champ contenant la chaîne de caractères d'origine ou une chaîne de caractères encadrée par des guillemets simples ou doubles.

delim

Alphanumérique

est le séparateur dans la chaîne parente entouré par des guillemets simples. Si vous spécifiez plus d'un caractère, seul le premier caractère est utilisé. Le séparateur n'est pas inclus dans le jeton.

token_number

Entier

est le nombre de jetons à extraire. Si cet argument est positif, les jetons sont comptées de gauche à droite. Si cet argument est négatif, les jetons sont comptées de droite à gauche. Par exemple, -2 extrait le deuxième jeton à partir de la droite. Lorsque l'argument est 0, la fonction renvoie une chaîne d'espaces.



Exemple : Extraire les jetons d'une chaîne

MNTGETTOK extrait les jetons d'une chaîne de caractères de longueur variable SKILLSTRING et stocke le résultat dans la chaîne de caractères de longueur variable TOKENX. Le délimiteur est un espace vide. Le numéro du jeton est basé sur la valeur de la variable de compte i, qui s'incrémente avec chaque transmition dans la boucle d'itération :

MAINTAIN                                          
MODULE IMPORT(MNTUWS)                             
SKILLSTRING/A0="Typing Steno Filing Bkkping";     
COMPUTE i/i2 = 1;                                 
TYPE "Job skills required are:"                   
REPEAT 6                                          
COMPUTE TOKENX/A0=MNTGETTOK(SKILLSTRING, ' ', i );
TYPE "<<TOKENX";                                  
COMPUTE i = i+1;                                  
ENDREPEAT                                         
END

La sortie est :

Job skills required are:
Typing                  
Steno                   
Filing                  
Bkkping                 


Exemple : Extraire le code postal d'une adresse

La procédure suivante contre la source de données EMPLOYEE récupère le segment EMPINFO et la première instance de ADDRESS_LN3 pour chaque employé, puis extrait le dernier jeton (code postal) de ADDRESS_LN3 :

MAINTAIN FILE EMPLOYEE                                    
MODULE IMPORT(MNTUWS)                                     
REPEAT ALL;                               
NEXT EMP_ID  INTO ESTACK                                  
IF FOCFETCH NE 0 THEN GOTO EXITREPEAT;                    
NEXT ADDRESS_LN3 INTO ASTACK                              
TYPE "<<ESTACK.FIRST_NAME  <<ESTACK.LAST_NAME";           
TYPE "<<ASTACK.ADDRESS_LN3";                              
COMPUTE ZIP/A0=MNTGETTOK(ASTACK.ADDRESS_LN3, " ", -1 );
TYPE "ZIP CODE IS: <<ZIP";                             
TYPE " ";                                                 
ENDREPEAT                                                 
END                                                       

La sortie est :

ALFRED     STEVENS    
NEW YORK NY 10001     
ZIP CODE IS: 10001    
                      
MARY       SMITH      
NEW YORK NY 10001     
ZIP CODE IS: 10001    
                      
DIANE      JONES      
NEW YORK NY  10001    
ZIP CODE IS: 10001    
                      
RICHARD    SMITH      
NEW YORK NY 10001     
ZIP CODE IS: 10001    
                      
JOHN       BANNING    
FREEPORT NY 11520     
ZIP CODE IS: 11520    
                      
JOAN       IRVING     
NEW YORK NY 10001     
ZIP CODE IS: 10001    
ANTHONY    ROMANS    
NEW YORK NY  10001   
ZIP CODE IS: 10001   
                     
JOHN       MCCOY     
NEW YORK NY 10001    
ZIP CODE IS: 10001   
                     
ROSEMARIE  BLACKWOOD 
NEW YORK NY  10001   
ZIP CODE IS: 10001   
                     
ROGER      MCKNIGHT  
NEW YORK NY 10001    
ZIP CODE IS: 10001   
                     
MARY       GREENSPAN 
NEW YORK NY  10001   
ZIP CODE IS: 10001   
                     
BARBARA    CROSS     
NEW YORK NY  10001   
ZIP CODE IS: 10001

Information Builders