Keine standard-Funktion TRIM ist erhältlich in CLLE. Allerdings
Wenn Sie möchten, kleben Sie zwei Variablen, dann betrachten *TCAT (oder |<). Dieser Befehl entfernt die Leerzeichen dazwischen (z.B. 'xyz' *TCAT 'uvw' wird 'xyzuvw'
Wenn Sie wirklich kürzen wollen, dann versuchen Sie "*TCAT $YOURVAR *TCAT " (kann nicht versuchen, diese selbst jetzt. Keine as/400 um zu Hause ... )
Oder verwenden Sie die Tatsache, dass Sie arbeiten mit ILE CL. Sie können mit dem Befehl CALLPRC zu nennen, ein Modul, das den trick tun! Schreiben, das Modul selbst mit ILE RPG-oder COBOL.
Wenn Sie brauchen, dann kann ich Ihnen eine RPG-Beispiel. RPG ist meine bevorzugte Sprache auf der iSeries.
Die *TCAT Streifen der nachfolgende Leerzeichen von den Operanden auf der linken Seite des Betreibers, die führende Leerzeichen von den Operanden auf der rechten Seite werden nicht entfernt 🙁 So ist der Effekt der zweiten Beispiel-Ausdruck [, die gar nicht unterstützt, wie Sie codiert werden, gemäß der leer-string nicht zulässig, da ein string-literal, pro CPD0126] würde mit der Wirkung einer TRIMR eher als ein TRIMM [wenn korrigiert, zu leer-Literale. Und zu betonen, dass das erste Beispiel, Ausdruck nicht entfernen Sie die Leerzeichen in der Regel, nur das entfernen der eine nachfolgende leere aus der 'xyz '. 'xyz ' *TCAT ' uvw' wird 'xzy uvw'
Da alle Variablen in der CL sind Feste Länge, es gibt keine logischen Anforderungen zu trimmen per se.
Verbinden zweier Wert ohne dazwischenliegende Leerzeichen, verwenden Sie die |< Betreiber, und ein einzelnes Leerzeichen verwenden |>.
Finden Sie die Länge in Zeichen ohne Leerzeichen, die Sie benötigen, zu tun, einen guten ol' altmodischen Fuß nach hinten auf den Wert mit %SST(&VAL &POS-1) zu testen, Zeichen-position für einen Platz. So etwas wie:
Einfach null-terminate-Wert, zum Beispiel für einen Aufruf einer C-Funktion:
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)
BEARBEITEN 2012-07-19*
In einigen Zeichensätzen ! statt |. Es gibt auch die CCSID-unabhängig *CAT-operation, die stattdessen verwendet werden kann. Siehe IBM-website hier und hier.
In der Version, wo diese Operatoren eingeführt? Die Betreiber |< und |> arbeiten nicht auf unsere V6R1. Da der Charakter | ist nicht auf der gleichen position in allen EBCDIC-Codepages, ich glaube nicht, dass es so eine gute Idee, diese zu benutzen, anstatt *TCAT sowieso.
Siehe mein edit - Sie wurden dort mindestens seit V3 und ich würde Wetten, da V1.
Die verschiedenen Betreiber haben sich schon seit dem System/38 (Vorläufer der AS/400 Serie). Für i 6.1 Dokumentation finden Sie unter Operatoren in AusdrückenLink Thema. Wenn Sie nicht arbeiten auf ein bestimmtes system, das problem ist fast garantiert, dass ein falsch konfiguriertes Gerät Beschreibung; KBDTYPE() und/oder CHRID() Attribute sind wahrscheinlich nicht mit der system-Konfiguration.
BTW, die Tatsache, dass Sie "nicht funktionieren" auf einigen Systemen wird der größte Grund Sie nicht zu verwenden. Änderungen am lokalen system oder auf eine bestimmte *DEVD können Sie nicht arbeiten können, auch wenn Sie vorher funktioniert hat.
Nicht arbeiten können, gelten nur, zu versuchen, den Quellcode kompilieren und einen Fehler empfangen. Einmal zusammengestellt, werden die Operatoren verwendet, die in der Quelle irrelevant. Das ist sicher kein Grund, um zu vermeiden, mit Ihnen.
Dol: "funktioniert Nicht" gemeint", wenn kompiliert', wie die früheren Kommentar angedeutet. Nach der ersten erfolgreichen kompilieren, ein zweites mal, es gilt nach einem zweiten Entwickler, der später zu ändern versucht der proc mit einer anderen *DEVD mit unterschiedlicher Konfiguration. Die Variante, die Charakter zeigen können, verändert. Ohne ein gutes Verständnis, was das problem ist, es kann hinzufügen, lästige Zeit zu dem, was vielleicht eine Zeit-und Kleinschreibung beheben. Dies ist umso wahrscheinlicher, wenn Sie versuchen zu implementieren Quelle zu mehreren Servern und einigen kompilieren können, während andere nicht können. Entwickler sollten Wartung.
Keine standard-Funktion TRIM ist erhältlich in CLLE. Allerdings
'xyz '
.'xyz ' *TCAT ' uvw'
wird'xzy uvw'
Da alle Variablen in der CL sind Feste Länge, es gibt keine logischen Anforderungen zu trimmen per se.
Verbinden zweier Wert ohne dazwischenliegende Leerzeichen, verwenden Sie die
|<
Betreiber, und ein einzelnes Leerzeichen verwenden|>
.Finden Sie die Länge in Zeichen ohne Leerzeichen, die Sie benötigen, zu tun, einen guten ol' altmodischen Fuß nach hinten auf den Wert mit %SST(&VAL &POS-1) zu testen, Zeichen-position für einen Platz. So etwas wie:
Einfach null-terminate-Wert, zum Beispiel für einen Aufruf einer C-Funktion:
BEARBEITEN 2012-07-19*
In einigen Zeichensätzen
!
statt|
. Es gibt auch die CCSID-unabhängig *CAT-operation, die stattdessen verwendet werden kann. Siehe IBM-website hier und hier.|<
und|>
arbeiten nicht auf unsere V6R1. Da der Charakter|
ist nicht auf der gleichen position in allen EBCDIC-Codepages, ich glaube nicht, dass es so eine gute Idee, diese zu benutzen, anstatt*TCAT
sowieso.Ich weiß, das ist alt, aber Sie kann mit %TRIM(&myVariable)
In releases vor %TRIM(), %TRIML() und %TRIMR() zur Verfügung standen, ILE CL könnte die 'triml' C-library-Funktion:
Der proc ist gefunden in *SRVPGM QC2UTIL1.
Sowohl In OPM-und ILE-CL, habe ich oft verwendet:
In beiden Fällen die resultierende Länge kann dann in einer %SST () - Ausdruck, um Wirkung das eigentliche trimmen.