• 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:

    • Share on Reddit (Opens in new window) Reddit
    • Share on Facebook (Opens in new window) Facebook
    • Share on LinkedIn (Opens in new window) LinkedIn
    • Share on X (Opens in new window) X
    • Email a link to a friend (Opens in new window) Email

    Tags:

    Sponsored by
    JAMS Software

    One Scheduler. IBM i, Windows, Linux, and More.

    IBM i teams trust JAMS to schedule and orchestrate jobs across every platform in their environment. Centralized visibility, cross-platform dependency management, and alerts that reach the right person before the business feels it.

    Fewer than 5% of IBM i shops run IBM i only. The rest are managing cross-platform dependencies — often without a clear picture of how they connect. JAMS draws that map, enforces those dependencies automatically, and gives your team a single place to monitor, manage, and recover when something goes wrong.

    If you are running hundreds of CL scripts and custom RPG processes, bring them as-is. JAMS runs them exactly as they do today — except now they are visible, monitored, and part of an orchestrated workflow instead of scattered across folders only one person knows about.

    No consumption-based pricing. No surprise bills when your workload spikes. You pay based on how many machines JAMS talks to — that’s it.

    Learn More → https://jamsscheduler.com/lp/ibm-i

    Share this:

    • Share on Reddit (Opens in new window) Reddit
    • Share on Facebook (Opens in new window) Facebook
    • Share on LinkedIn (Opens in new window) LinkedIn
    • Share on X (Opens in new window) X
    • Email a link to a friend (Opens in new window) Email

    More on RPG Encapsulation The Dangers of Temporarily Changing User Profiles

    Leave a ReplyCancel 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

  • Inside The Encryption Key Management Changes In IBM i 7.6
  • FalconStor Moved To The Blue Lagoon, And Is Poised For Growth Because Of It
  • Guru: Claude’s SQL Tip
  • Astera Makes Extracting Legacy Report Data an AI Specialty
  • IBM i PTF Guide, Volume 28, Number 27
  • Welcoming The New IBM i Chief Architect And Other New Top Brass
  • A Deep Dive Into That Power S1112 Entry Power11 Server
  • Guru: Beyond Three-Part Naming – Running SQL Across Remote IBM i Systems
  • How IBM Bolstered IBM i Resilience In The Summer Tech Refreshes
  • IBM i PTF Guide, Volume 28, Number 26

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