• 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
    DRV Tech

    Get More Out of Your IBM i

    With soaring costs, operational data is more critical than ever. IBM shops need faster, easier ways to distribute IBM applications-based data to users more efficiently, no matter where they are.

    The Problem:

    For Users, IBM Data Can Be Difficult to Get To

    IBM Applications generate reports as spooled files, originally designed to be printed. Often those reports are packed together with so much data it makes them difficult to read. Add to that hardcopy is a pain to distribute. User-friendly formats like Excel and PDF are better, offering sorting, searching, and easy portability but getting IBM reports into these formats can be tricky without the right tools.

    The Solution:

    IBM i Reports can easily be converted to easy to read and share formats like Excel and PDF and Delivered by Email

    Converting IBM i, iSeries, and AS400 reports into Excel and PDF is now a lot easier with SpoolFlex software by DRV Tech.  If you or your users are still doing this manually, think how much time is wasted dragging and reformatting to make a report readable. How much time would be saved if they were automatically formatted correctly and delivered to one or multiple recipients.

    SpoolFlex converts spooled files to Excel and PDF, automatically emailing them, and saving copies to network shared folders. SpoolFlex converts complex reports to Excel, removing unwanted headers, splitting large reports out for individual recipients, and delivering to users whether they are at the office or working from home.

    Watch our 2-minute video and see DRV’s powerful SpoolFlex software can solve your file conversion challenges.

    Watch Video

    DRV Tech

    www.drvtech.com

    866.378.3366

    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

  • The Power11 Transistor Count Discrepancies Explained – Sort Of
  • Is Your IBM i HA/DR Actually Tested – Or Just Installed?
  • Big Blue Delivers IBM i Customer Requests In ACS Update
  • New DbToo SDK Hooks RPG And Db2 For i To External Services
  • IBM i PTF Guide, Volume 27, Number 33
  • Tool Aims To Streamline Git Integration For Old School IBM i Devs
  • IBM To Add Full System Replication And FlashCopy To PowerHA
  • Guru: Decoding Base64 ASCII
  • The Price Tweaking Continues For Power Systems
  • IBM i PTF Guide, Volume 27, Numbers 31 And 32

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