• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Find the Length of a Character String in CL, Take Two

    December 7, 2005 Hey, Ted

    Just yesterday, I was trying to determine the length of the value of a CL variable, so your tip today using the MSGDTA trick was helpful. I was thinking that IBM had added %TRIM and %LEN to the list of CL built-in functions (BIFs) that exist in recent releases, but I guess I was imagining this. Why hasn’t IBM done this, with all the other great enhancements to CL recently? Is there a way to add your own BIFs to CL by creating your own commands?

    –Flagler

    I have long advocated the creation of commands to extend the CL language, but I find that many programmers have never created a command. So, yes, I think you have a good idea by suggesting the use of commands, even though the commands you create are not true built-in functions.

    One reader, Steve, sent in a command he uses to determine the length of character values up to 2000 bytes long. Here’s the command definition source code.

    /* Command: RTVVARLEN                     */
    /* CPP: RTVVARLENC                        */
    /* Retrieve the length of a CL variable   */
    /* without trailing blanks                */
     CMD     PROMPT('Return the length of a CL var')
     PARM    KWD(STRING) TYPE(*CHAR) LEN(2000) MIN(1) +
               EXPR(*YES) VARY(*YES) CHOICE('String +
               variable') PROMPT('String variable to check')
     PARM    KWD(LEN) TYPE(*DEC) LEN(4) RTNVAL(*YES) +
               MIN(1) PROMPT('Return variable (4,0)')
    

    Steve didn’t tell me what he calls his command, so I used the name RTVVARLEN (Retrieve Variable Length). Here’s the command to create the command.

    CRTCMD CMD(xxx/RTVVARLEN)
           PGM(*LIBL/RTVVARLENC)
           SRCFILE(xxx/QCMDSRC)
           ALLOW(*BPGM *IPGM *BREXX *IREXX)
    

    The command-processing program is short and simple.

    /* Retrieve the length of a CL variable */
    /* with trailing blanks removed */
    PGM        PARM(&STRING &LEN)
    DCL        VAR(&STRING) TYPE(*CHAR) LEN(2000)
    DCL        VAR(&LEN) TYPE(*DEC) LEN(4 0)
    CHGVAR     VAR(&LEN) VALUE(%BIN(&STRING 1 2))
    

    I called the program RTVVARLENC and implemented it as an ILE program compiled to run in the calling program’s activation group.

    CRTBNDCL PGM(xxx/RTVVARLENC)
             SRCFILE(xxx/QCLSRC)
             SRCMBR(RTVVARLENC)
             DFTACTGRP(*NO)
             ACTGRP(*CALLER)
    

    Last, here’s the program I used to test Steve’s command. I called it RTVVARLENT.

    PGM        PARM(&P1)
    DCL        VAR(&P1) TYPE(*CHAR) LEN(32)
    DCL        VAR(&LEN) TYPE(*DEC) LEN(4)
    RTVVARLEN  STRING(&P1) LEN(&LEN)
    DMPCLPGM
    

    I found it returned the correct length of anything I passed to it in the first parameter.

    I can’t answer the first question, but I am encouraged by the enhancements IBM made to the CL compiler in V5R3 and am hopeful that we will see more and better things in future releases.

    –Ted


    RELATED STORY

    Find the Length of a Character String in CL

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags:

    Sponsored by
    Raz-Lee Security

    The MFA Mobile App provides a secure and user-friendly way to add strong authentication without complicating access. It enables users to approve login requests or generate one-time passwords directly from their mobile device, ensuring that access is granted only after a second, trusted factor is verified.

    Learn More

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    ProData Goes ‘On Demand’ with DBU Installing WebSphere Application Server 6.0

    Leave a Reply Cancel reply

Volume 5, Number 45 -- December 7, 2005
THIS ISSUE
SPONSORED BY:

Advanced Systems Concepts
WorksRight Software
iTera

Table of Contents

  • Find the Length of a Character String in CL, Take Two
  • Installing WebSphere Application Server 6.0
  • Admin Alert: Backing Up i5/OS Partitions to Disk

Content archive

  • The Four Hundred
  • Four Hundred Stuff
  • Four Hundred Guru

Recent Posts

  • Spring IBM i Tech Refreshes Will Come A Bit Later This Year
  • You Are Much More Than Power Systems, And So Are We
  • Startup Seeks The “Golden Path” for IBM i Modernization
  • What Can IBM Do To Make The Future Power S1112 Mini System Compelling?
  • IBM i PTF Guide, Volume 28, Number 15
  • Bob 1.0 Users Bugged By Lack Of One Feature
  • Here Come The AI-Based Code Modernization Offerings
  • Guru: Cohesion First – What A Procedure Should Be Responsible For
  • IBM Offers Trade-Ins On Storage To Grease The Upgrade Skids
  • IBM i PTF Guide, Volume 28, Number 14

Subscribe

To get news from IT Jungle sent to your inbox every week, subscribe to our newsletter.

Pages

  • About Us
  • Contact
  • Contributors
  • Four Hundred Monitor
  • IBM i PTF Guide
  • Media Kit
  • Subscribe

Search

Copyright © 2025 IT Jungle