|
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-2024 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.