Extraire une sous-chaîne de longueur variable

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.


Haut de page

x
Syntaxe : Extraire une sous-chaîne de longueur variable
SUBSTV(upper_limit, source_string, start, sub_limit, output)

où :

upper_limit

Entier

est la limite de la longueur de la chaîne source.

source_string

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).

start

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.

sub_limit

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.

output

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.



Exemple : Extraire une sous-chaîne de longueur variable

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