Select files by wildcard

2,555 pts.
Tags:
AS/400
CLP
Qshell
Wildcard
An old application running S/36e creates workfiles in library QS36F with the following name-structure: ABC.aaXb where 'aa' and 'b' are random characters, and the 'X' is constant. These workfiles are sometimes not  deleted by the application even if they should have been. Once in a while a data-entry program cannot execute since it tries to create a workfile that is already there; - therefore we want to make this 'global' delete. We have no sourcecode so we want to create a batch-program which can run unattended during nighthours. We have three ideas on how to create a solution: 1. Make a CLP which reads QSYS2/SYSTABLES and select the filenames that qualify for deletion. My proposed CL pseudo-code:
         PGM
         DCLF QSYS2/SYSTABLES
loop:   RTVF
          MONMSG .... GOTO ENDPGM
          IF %SST(TABLE_SCHEMA = 'QS36F') DO
             IF %SST(TABLE_NAME, 1, 4) = 'ABC.' AND    +
                 %SST(TABLE_NAME, 7, 1) = 'X'               +
             THEN(DLTF QS36F/TABLE_NAME))
          ENDDO
          GOTO loop
endpgm: ENDPGM
2. Another approach could be to use SQL. My proposed pseudo-code:
SELECT TABLE_NAME, TABLE_SCHEMA FROM QSYS2/SYSTABLES
WHERE TABLE_NAME = 'QS36F'
  AND SUBSTR(TABLE_NAME 1  4) = 'ABC.'
  AND SUBSTR(TABLE_NAME 7  1) = 'X'
....followed by
DROP TABLE QS36F/TABLE_NAME
How can this be put together into a batch-program ? 3. Use QSHELL Can this be used at all in a non-IFS environmen? We like the thought of using the SELECT and PIPE functionality of QSHELL. Any comments and thoughts on this task are most welcome. DanF

Software/Hardware used:
System i, v5r4
ASKED: July 21, 2011  8:07 AM
UPDATED: March 31, 2012  8:36 PM

Answer Wiki

Thanks. We'll let you know when a new response is added.

<a href=”http://www.louboutinshoecheap.com/”>Christian Louboutin Shoes</a> are great to wear during warmer weather because they help keep your feet cool. <a href=”http://www.louboutinshoecheap.com/”>Cheap Louboutin Pumps</a> are an open type of outdoor footwear, consisting of a sole held to the wearer’s foot by straps or thongs passing over the instep and around the ankle. Wedge white <a href=”http://www.louboutinshoecheap.com/”>Discount Christian Louboutin Sale</a> are also suitable for shopping because they are so comfortable to walk around in. Among the advantages of wedge sandals are that these <a href=”http://www.louboutinshoecheap.com/”>Cheap Louboutin Shoe</a> add height, but are easier to walk in than stilettos, and that a wedge heel looks great with nearly any <a href=”http://www.louboutinshoecheap.com/christian-louboutin-pumps/”>Christian Louboutin Pumps</a>. They look good with almost anything – from jeans to flowy skirts. The color white ensures that the pair of <a href=”http://www.louboutinshoecheap.com/christian-louboutin-evening/”>Christian Louboutin Evening</a> can be matched with anything. <a href=”http://www.louboutinshoecheap.com/”>http://www.louboutinshoecheap.com/</a>

Discuss This Question: 6  Replies

 
There was an error processing your information. Please try again later.
Thanks. We'll let you know when a new response is added.
Send me notifications when members answer or reply to this question.

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
  • TomLiotta
    ...a non-IFS environmen? If it runs on an AS/400 at V3R1 or later, it is running in an IFS environment. The IFS includes all file systems. For a library named QS36F with a file named ABC.aaXb, the name of that file in IFS format is [/QSYS.LIB/QS36F.LIB/ABC.aaXb.FILE]. The use of a .dot (".") in the middle of a file name is messy, but it shouldn't be a problem. A Qshell utility such as the find - Find files utility could help. For example, try this in QSH:
    find /qsys.lib/qs36f.lib -name 'ABC.??X?.FILE' -type d
    The example pattern is ['ABC.??X?.FILE']. Note that it is case-sensitive in this example. And note that I used [-type d] to limit the results only to include "directories". That's because an IFS reference to a database *FILE object is handled as a directory access. The "files" in a *FILE directory are its members, each of which will have the .MBR extension as part of its name. That is, a "directory" named [/qsys.lib/qs36f.lib/ABC.aaXb.FILE] will probably have at least one "file" in it named [/qsys.lib/qs36f.lib/ABC.aaXb.FILE/ABC.aaXb.MBR]. When you feel comfortable with what the above Qshell command does, review the possibilities from:
    find /qsys.lib/qs36f.lib -name 'ABC.??X?.FILE' -type d -exec rm -R {} ;
    The -exec option says to execute a rm utility for each time find gets a match. The rm -R option says to process a directory recursively, which means members are removed before the file is removed. (Generally you can't delete a 'directory' if it's not empty.) The braces get replaced by whatever name that find supplies. The semi-colon is needed to terminate the -exec option which might be complex. The back-slash will be needed as an escape character if you run the command in the shell because the shell will want to process the semi-colon according to its rules. That should be enough to let you experiment for a while. Tom
    125,585 pointsBadges:
    report
  • DanTheDane
    Thanks Tom, As always very informative information from you. I'll test (and implement!) over the weekend, and then report back to this thread. DanF
    2,555 pointsBadges:
    report
  • DanTheDane
    I now found a working soluion:
    QSH CMD('find QSYS.LIB/QS36F.LIB -name "ABC.??X1.FILE" -type d | xargs rm -R ;')
    One very essential finding from my experimentations: Make sure that your rootpath is '' . Thanks again DanF
    2,555 pointsBadges:
    report
  • TomLiotta
    Make sure that your rootpath is... The rootpath should only be relevant if you use a 'relative' path. If an 'absolute' path is used, i.e., a path beginning with a slash, the rootpath shouldn't affect processing. See Path name for basic discussion. Tom
    125,585 pointsBadges:
    report
  • DanTheDane
    Thanks again Tom, I tested the command after having added a slash to the filename-string, and voila, it now works 100% as wanted. The modified command in its full comes here:
    QSH CMD('find  /QSYS.LIB/QS36F.LIB -name "ABC.??X2.FILE" -type d | xargs rm -R ;')
    
    DanF
    2,555 pointsBadges:
    report
  • TomLiotta
    Hmmm... the timing of your reply makes me think "DanTheDane" refers to location if not heritage. You're welcome. Tom
    125,585 pointsBadges:
    report

Forgot Password

No problem! Submit your e-mail address below. We'll send you an e-mail containing your password.

Your password has been sent to:

To follow this tag...

There was an error processing your information. Please try again later.

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Thanks! We'll email you when relevant content is added and updated.

Following