• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Advanced Pattern Matching in RPG

    January 12, 2005 Michael Sansoterra

    The code for this article is available for download.

    SQL has many great features, including the LIKE predicate. LIKE’s power is manifest in its ability to have multiple wild cards in a search pattern. Unfortunately, RPG’s closest analog to LIKE is the %SCAN built-in function, which is limited to searching a string for a single substring.

    Even though %SCAN’s power is limited, a little extra code can be used to simulate LIKE. The code in program LikeR.RPGLE contains subprocedure Like. The parameters for the Like subprocedure are:

    Like(search string:pattern[:wildcard])
    

    An indicator variable is returned by Like to indicate whether the string contains the requested pattern. The wildcard parameter is optional; if unspecified, the percent sign (%) will be assumed.

    For the purpose of illustrating the Like subprocedure’s power, program LikeR.RPGLE can be called from the command line with two or three arguments (search, pattern, and the optional wildcard). The Dsply opcode is used to indicate with a 1 or a 0 as to whether the pattern matched.

    Samples

    The trick to this type of pattern matching with %SCAN is to break the pattern into its components and search for each component sequentially.

    Search String Pattern Wildcard Match
    ABCDEFGHIJKLMNOPQRS %G%Q%S% % Yes
    ABCDEFGHIJKLMNOPQRS A%P % No
    The % is a test% *is*test* * Yes
    RPG is a great language is a great% % No
    A1064 A1064 % Yes

    For comparative purposes, here are a few code examples of how Like compares to %Scan:

    Example 1

    Search='The quick brown fox';
    
    // Search for pattern assuming the default wildcard (%)
    If Like(Search:'%quick%fox%');
        Dsply 'LIKE %quick%fox%' '' *InLR;
    EndIf;
    //
    // Here is the equivalent use of the scan op-code
    //
    If %Scan('quick':Search)>*Zero
    And %Scan('fox':Search)>%Scan('quick':Search);
        Dsply '%SCAN %quick%fox%' '' *InLR;
    EndIf;
    

    Example 2

    Search='The quick brown fox';
    
    // Test if pattern begins with "The" and ends with "fox"
    If Like(Search:'The%fox');
        Dsply 'LIKE The%fox' '' *InLR;
    EndIf;
    
    // The equivalent RPG code is
    // (actually "bullet proof" code would be much longer because
    //  it would test acceptable string lengths, start pos, etc.)
    If %Subst(Search:1:3)='The'
    And %Subst(Search:%Len(Search)-2:3)='fox';
        Dsply 'SCAN The%fox' '' *InLR;
    EndIf;
    

    As you can see, the Like subprocedure provides shorter code and offers more flexibility.


    Here are a few additional notes on the LIKE subprocedure:

    • It does not recognize single character substitution (the underscore _ character).

    • The pattern matching is case-sensitive.

    • Trailing spaces are significant, so use the %TrimR function to remove them when necessary.

    This subprocedure can be used to provide a subset feature for subfile programs or reports that don’t use embedded SQL. Creating simple subprocedures such as LIKE can quickly pay off by adding powerful functionality to any number of programs.

    Michael Sansoterra is a programmer/analyst for i3 Business Solutions, an IT services firm based in Grand Rapids, Michigan. Click here to contact Michael Sansoterra by e-mail.

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags:

    Sponsored by
    ARCAD Software

    DevSecOps & Peer Review – The Power of Automation

    In today’s fast-paced development environments, security can no longer be an afterthought. This session will explore how DevSecOps brings security into every phase of the DevOps lifecycle—early, consistently, and effectively.

    In this session, you’ll discover:

    • What DevSecOps is and why it matters?
    • Learn how to formalize your security concerns into a repeatable process
    • Discover the power of automation through pull requests, approval workflows, segregation of duties, peer review, and more—ensuring your data and production environments are protected without slowing down delivery.

    Whether you’re just getting started or looking to enhance your practices, this session will provide actionable insights to strengthen your security posture through automation and team alignment to bring consistency to the process.

    Watch Now!

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Help/Systems’ Scheduler Now Automates EnterpriseOne Jobs Testing At iSeries Shops Not Up to Snuff, Original Finds

    Leave a Reply Cancel reply

Volume 5, Number 2 -- January 12, 2005
THIS ISSUE
SPONSORED BY:

ProData Computer Svcs
Patrick Townsend & Associates
Guild Companies

Table of Contents

  • More on RPG Encapsulation
  • Advanced Pattern Matching in RPG
  • The Dangers of Temporarily Changing User Profiles

Content archive

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

Recent Posts

  • Power Systems Grows Nicely In Q3, Looks To Grow For All 2025, Too
  • Beta Of MCP Server Opens Up IBM i For Agentic AI
  • Sundry IBM i And Power Stack Announcements For Your Consideration
  • Please Take The IBM i Marketplace Survey
  • IBM i PTF Guide, Volume 27, Number 43
  • IBM Pulls The Curtain Back A Smidge On Project Bob
  • IBM Just Killed Merlin. Here’s Why
  • Guru: Playing Sounds From An RPG Program
  • A Bit More Insight Into IBM’s “Spyre” AI Accelerator For Power
  • IBM i PTF Guide, Volume 27, Number 42

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