|
Here's a subprocedure I have in my strings service program. It works similar to what your asking for, and uses recursion. It has worked slick for me. <<IncChar.txt>> Bradley V. Stone Taylor Corporation - OASIS Programmer/Analyst bvstone@taylorcorp.com > -----Original Message----- > From: Joel Fritz [SMTP:JFritz@sharperimage.com] > Sent: Thursday, April 15, 1999 3:04 PM > To: 'MIDRANGE-L@midrange.com' > Subject: RE: Incrementing Character Fields > > I'm sure there's a more elegant way of doing this, but here's a brute > force > method: > > Load an array with the alphabet. > > Look at the rightmost character in the field you want to increment > If it's less than 'Z' > look it up in the alphabet and replace it with the next > character > you're done > else > replace it with 'A' and repeat the above one > character to the left 'til you've either > encountered total overflow or you're done. > > I've skipped the parts where you could check for invalid characters and > 'ZZZ' > > Don't like the LOKUP or LOOKUP much, but it's only over a 26 element array > and that seems fast enough. Not enough elements for a bsearch. > -----Original Message----- > From: DAsmussen@aol.com [mailto:DAsmussen@aol.com] > Sent: Thursday, April 15, 1999 11:24 AM > To: midrange-l@midrange.com > Subject: Incrementing Character Fields > > > Hey Folks, > > Here's an interesting exercise! I'd swear that I've seen this done in RPG > > many moons ago, but the only practical example I can recall is from a long > > dead platform using an equally long dead version of BASIC. Say you have a > > three character alpha field that needs to be incremented progressively > like > a > number (e.g., AAA, AAB, AAC...ABA, ABB, ABC...ZZX, ZZY, ZZZ). Any ideas > on > how this could be done in either RPG or RPGLE? > > TIA, > > Dean Asmussen > Enterprise Systems Consulting, Inc. > Fuquay-Varina, NC USA > E-mail: DAsmussen@aol.com > > "The brain is a wonderful organ. It starts the moment you get up and > doesn't > stop until you get into the office." -- Robert Frost > +--- > | This is the Midrange System Mailing List! > | To submit a new message, send your mail to MIDRANGE-L@midrange.com. > | To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com. > | To unsubscribe from this list send email to > MIDRANGE-L-UNSUB@midrange.com. > | Questions should be directed to the list owner/operator: > david@midrange.com > +--- > +--- > | This is the Midrange System Mailing List! > | To submit a new message, send your mail to MIDRANGE-L@midrange.com. > | To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com. > | To unsubscribe from this list send email to > MIDRANGE-L-UNSUB@midrange.com. > | Questions should be directed to the list owner/operator: > david@midrange.com > +---
*//////////////////////////////////////////////////////////////*
* (#IncChar) Increment Character *
*//////////////////////////////////////////////////////////////*
P #IncChar B EXPORT
*--------------------------------------------------------------*
D #IncChar PI 256
D text 256 VALUE
D size 3 0 VALUE
*
D C1 C CONST('ABCDEFGHIJKLMNOPQRSTUVWXYZ012-
D 3456789')
D C2 C CONST('BCDEFGHIJKLMNOPQRSTUVWXYZA123-
D 4567890')
*
D LoValC C CONST('A')
D LoValN C CONST('0')
*
D NewText S LIKE(text)
D NewSize S LIKE(size)
*
D CurChar S 1
D LoVal S 1
*--------------------------------------------------------------*
C if (text = ' ')
C eval size = 1
C endif
*
C eval CurChar = %subst(text:size:1)
C TESTN CurChar 99
*
C if (*IN99)
C eval Loval = LovalN
C else
C eval LoVal = LoValC
C endif
*
C C1:C2 XLATE CurChar CurChar
*
C eval %subst(text:size:1) = CurChar
*
C if (CurChar = LoVal) and (size > 1)
C eval NewSize = (size - 1)
C eval NewText = (%subst(text:1:NewSize))
C eval %subst(text:1:NewSize) =
C #IncChar(NewText:NewSize)
C endif
*
C RETURN text
*--------------------------------------------------------------*
P #IncChar E
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.