Comment : |
Langages disponibles : reporting
La fonction SUBSTV extrait une sous-chaîne d'une chaîne et est semblable à SUBSTR. Toutefois, la position de fin de la chaîne est calculée à partir de la position de départ et la longueur de la sous-chaîne. Par conséquent, elle comporte moins de paramètres que SUBSTR. En outre, la longueur actuelle du champ de sortie, s'il s'agit d'un champ AnV, est déterminée en fonction de la longueur de la sous-chaîne.
SUBSTV(upper_limit, source_string, start, sub_limit, output)
où :
Entier
est la limite de la longueur de la chaîne source.
Alphanumérique de type An ou AnV
est la chaîne de caractères contenant la sous-chaîne à extraire. Cela peut être une sous-chaîne entre par des guillemets simples ('), ou le champ qui contient la chaîne. S'il s'agit d'un champ, il peut être au format An ou AnV. S'il s'agit d'un champ au format AnV, sa longueur, prise de la longueur en octets du champ, est renvoyée. Si la valeur de limite_supérieure est inférieure à la longueur actuelle, la valeur de chaîne source est tronquée jusqu'à la limite supérieure. La valeur finale de la longueur déterminée par cette comparaison est référencée comme paramètre p_length (consultez la description du paramètre de sortie pour plus d'informations).
Entier
est la position de départ de la sous-chaîne dans la chaîne source. La position de départ peut dépasser la longueur de la chaîne source, ce qui entraîne le renvoi des espaces.
Entier
est la longueur de la sous-chaîne d'entrée en caractères. Notez que la position de fin peut dépasser la longueur de la chaîne d'entrée en fonction des valeurs fournies pour start et sub_limit.
Alphanumérique de type An ou AnV
est le champ qui contient le résultat, ou le format de la valeur de sortie entre guillemets simples ('). Ce champ peut être au format An ou AnV.
Si le format de output est AnV, et supposant que end est la position de fin de la sous-chaîne, la longueur actuelle, outlen est calculée comme ce qui suit, des valeurs pour end, start, et p_length (référez-vous au paramètre source_string pour plus d'informations) :
Si end > p_length ou end < start, alors outlen = 0. Autrement, outlen = end - start + 1.
La requête suivante extrait un article en fin de ligne précis ou indéfini dans le titre d'un film (comme par exemple ", THE" dans SMURFS, THE"). Il découpe d'abord les espaces à droite pour que l'article soit le modèle de droite. Il trouve ensuite la position de départ et la longueur du modèle. Puis SUBSTV extrait le modèle et TRIMV découpe le modèle du titre :
DEFINE FILE MOVIES
TITLEV/A39V = TRIMV('T',TITLE, 39,' ', 1, TITLEV);
PSTART/I4 = POSITV(TITLEV,LENV(TITLEV,'I4'), ',', 1,'I4');
PLEN/I4 = IF PSTART NE 0 THEN LENV(TITLEV,'I4') - PSTART +1
ELSE 0;
PATTERN/A20V= SUBSTV(39, TITLEV, PSTART, PLEN, PATTERN);
NEWTIT/A39V = TRIMV('T',TITLEV,39,PATTERN,LENV(PATTERN,'I4'), NEWTIT);
END
TABLE FILE MOVIES
PRINT TITLE
PSTART AS 'Pattern,Start' IN 25
PLEN AS 'Pattern,Length'
NEWTIT AS 'Trimmed,Title' IN 55
BY CATEGORY NOPRINT
WHERE PLEN NE 0
END
La sortie est :
Pattern Pattern Trimmed TITLE Start Length Title ----- ------ ------- ------- SMURFS, THE 7 5 SMURFS SHAGGY DOG, THE 11 5 SHAGGY DOG MALTESE FALCON, THE 15 5 MALTESE FALCON PHILADELPHIA STORY, THE 19 5 PHILADELPHIA STORY TIN DRUM, THE 9 5 TIN DRUM FAMILY, THE 7 5 FAMILY CHORUS LINE, A 12 3 CHORUS LINE MORNING AFTER, THE 14 5 MORNING AFTER BIRDS, THE 6 5 BIRDS BOY AND HIS DOG, A 16 3 BOY AND HIS DOG
WebFOCUS |