2010-02-22 4 views

Répondre

3

Aucune fonction standard TRIM n'est disponible dans CLLE. Cependant,

  • Si vous souhaitez coller deux variables, regardez * TCAT (ou | <). Cette commande supprime les blancs entre (par exemple 'xyz' * TCAT 'uvw' devient 'xyzuvw'
  • Si vous voulez vraiment couper, alors essayez '' * TCAT $ YOURVAR * TCAT '' (impossible d'essayer celui-ci
  • ILE CL Vous pouvez utiliser la commande CALLPRC pour appeler un module qui peut faire l'affaire! vous avec le module RPG ILE ou COBOL.
+0

Si vous avez besoin, alors je peux vous donner un exemple RPG. RPG est ma langue préférée sur l'iSeries. – robertnl

+0

Le \ * TCAT supprime les espaces de fin de l'opérande à gauche de l'opérateur; les blancs principaux de l'opérande à droite ne sont pas supprimés :-(Ainsi, l'effet de la deuxième expression d'exemple [qui n'est même pas supportée, comme codée, par la chaîne vide interdite en tant que chaîne littérale, par CPD0126] correspondrait au effet d'un TRIMR plutôt que d'un TRIM [si corrigé pour la première fois, utiliser des littéraux vides.Et pour souligner cela, le premier exemple d'exemple ne supprime pas les blancs en général, en supprimant seulement le vide final du "xyz". "xyz" * TCAT "uvw" devient "xzy uvw" – CRPence

1

Comme toutes les variables CL sont de longueur fixe, il n'y a pas d'exigence logique de couper en soi.

à jo dans deux valeurs sans espaces intermédiaires, utilisez l'opérateur |< et, pour inclure un seul espace, utilisez |>.

Pour trouver la longueur en caractères à l'exclusion des espaces de fin, vous devez faire un bon vieux marche arrière sur la façonné valeur à l'aide% SST (& VAL & POS 1) pour tester chaque position de caractère pour un espace. Quelque chose comme:

DCL &LEN *DEC (15 0) 
DCL &VAL *CHAR 50 VALUE('Some test data') 
DCL &CHR15 *CHAR 15 

CHGVAR &LEN 50 
LOOP: IF (&LEN > 1 & %SST(&VAL &LEN 1)==' ') (DO) 
    CHGVAR &LEN VALUE(&LEN - 1) 
    GOTO LOOP 
    ENDDO 

CHGVAR &CHR15 &LEN 
SNDPGMMSG ('The length is' |> &CHR15) /* Can't concat decimal values */ 

Pour simplement nul mettre fin à une valeur, par exemple, faire un appel à une fonction C:

DCL &VAL *CHAR 50 VALUE('Some test text') 
DCL &VALNUL *CHAR 51 /* +1 for the null */ 
DCL &NULL *CHAR 1 VALUE(X'00') 

CHGVAR &VALNUL VALUE(&VAL |< &NULL) 

EDIT 2012-07-19 *

Dans certains jeux de caractères, ! est utilisé à la place de |. Il existe également l'opération CAT * CCSID indépendante qui peut être utilisée à la place. Voir le site Web d'IBM here et here.

+0

Dans quelle version ces opérateurs ont-ils été introduits? Les opérateurs '| <' and '|> 'ne fonctionne pas sur notre V6R1. Comme le caractère '|' ne se trouve pas dans la même position dans toutes les pages de code EBCDIC, je ne pense pas que ce soit une bonne idée de les utiliser à la place de '* TCAT'. – kratenko

+0

@kratenko: Voir mon edit - ils ont été là depuis au moins V3, et je parierais depuis V1. –

+0

Les différents opérateurs existent depuis le System/38 (un prédécesseur de la série AS/400). Pour la documentation d'i 6.1, voir le sujet ** Opérateurs dans les expressions ** [Lien] (http://pic.dhe.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=/rbam6/rbam6opsinexp.htm) . Si elles ne fonctionnent pas sur un système donné, le problème est presque garanti d'être une description de périphérique mal configurée; les attributs KBDTYPE() et/ou CHRID() sont probablement incompatibles avec la configuration du système. – user2338816

1

je sais que c'est vieux, mais vous pouvez utiliser% TRIM (& myVariable)

0

Dans les versions avant% TRIM(),% TRIML() et% TRIMR() étaient disponibles, ILE CL pourrait utiliser le ' fonction de bibliothèque triml 'C:

dcl &lPath  *int   value(0) 

callprc 'triml' (+ 
        &Dir   + 
        (' ' *byval) + 
       ) + 
      rtnval(&lPath) 

La proc se trouve dans * SRVPGM QC2UTIL1.

Dans les deux OPM et ILE CL, je l'ai souvent utilisé:

dcl &lmsgtxt1 *dec ( 5 0) value(0) 

rtvmsg  msgid(cpf9897) msgf(QSYS/QCPFMSG) + 
      msgdta(&SQLStm) + 
      msglen(&lmsgtxt1) 

Dans les deux cas, la longueur obtenue peut ensuite être utilisé dans une expression% SST() pour effectuer le parage réelle.