| IBM MAINFRAME HELP & SUPPORT FORUMS Technical Forums for IBM Mainframe Applications like COBOL, JCL, CICS, DB2, FileAid, DFSORT, Endevor, Xpediter, CoolGen, CA-7&11, AbendAid, IMS, IDMS, PL/I, MqSeries, SyncSort, Assembler, ChangeMan, Easytrieve, InterTest, REXX, CLIST etc...
|
| View previous topic :: View next topic |
| Author |
Message |
vidyaa
Joined: 02 May 2008
Posts: 37
Location: chennai
|
| Posted: Tue Aug 19, 2008 10:19 am Post subject: how to find the count and divide by that many zeros |
|
|
hi,
i have an variable decared as
03 WS-SAFECRT PIC 9(4).
the values can be like WS-SAFECRT = 1234, WS-SAFECRT = 0102,
WS-SAFECRT=0045
i need to take the valid values of the variable (i.e) remove the leading zeros and take the length of the vaibable and divide by 1000,1000,100 corresponding to the original length of the variable
if WS-SAFECRT = 1234 then RESULT = WS-SAFECRT/10000 (since lenght of 1234 is 4 hence dividing by 10000)
WS-SAFECRT = 0102 then RESULT = WS-SAFECRT/1000 (since lenght of 0102 is 3 hence dividing by 1000)
WS-SAFECRT = 0045 then RESULT = WS-SAFECRT/100 (since lenght of 0045 is 2 hence dividing by 100)
how can this be done in cobol |
|
| Back to top |
|
dick scherrer
Joined: 23 Nov 2006
Posts: 8733
Location: 221 B Baker St
|
| Posted: Tue Aug 19, 2008 11:03 am Post subject: |
|
|
Hello,
Code: IF WS-SAFECRT > 999 COMPUTE THE-RESULT = WS-SAFECRT / 10000 and so on . . . |
|
| Back to top |
|
Sambhaji
Joined: 16 Feb 2007
Posts: 267
Location: Pune, India
|
| Posted: Tue Aug 19, 2008 3:05 pm Post subject: |
|
|
Hi Vidya,
below is the logic am giving to you
on that line you can build code
divvalue=1
temp=yourno
do until temp > = 1
{
divvalue=divvalue*10
temp=yourno/10
yourno=temp
}
eg if yourno is 1234 then divvalue will be 10000
if yourno is 0123 then divvalue will be 1000
if yourno is 0 then divvalue will be 1 ie no zeros ( :) ) |
|
| Back to top |
|
mytags
Joined: 28 Apr 2008
Posts: 64
Location: US
|
| Posted: Tue Aug 19, 2008 4:23 pm Post subject: |
|
|
Hi
Using if condition is the easiest ways.As Dick said.
Thanks
Mytags |
|
| Back to top |
|
Sambhaji
Joined: 16 Feb 2007
Posts: 267
Location: Pune, India
|
| Posted: Tue Aug 19, 2008 4:30 pm Post subject: |
|
|
but then it will be hard coded and only work for number for which if is coded
above is generic logic works for any no of digits :) |
|
| Back to top |
|
dick scherrer
Joined: 23 Nov 2006
Posts: 8733
Location: 221 B Baker St
|
| Posted: Tue Aug 19, 2008 9:48 pm Post subject: |
|
|
Hello,
Quote: but then it will be hard coded and only work for number for which if is coded I believe you misunderstand. There will be only 1 value hard-coded for each 999, 99, and 9. This will run much more efficiently than the loop which will use many cpu cycles unnecessarily.
"Any number of digits" should not be an issue as the field only holds 4 digits.
The loop would not be obvious to many who read the code. It is best to implement code that is correct, easily maintainable, and does not use more system resource than needed. |
|
| Back to top |
|
vidyaa
Joined: 02 May 2008
Posts: 37
Location: chennai
|
| Posted: Wed Aug 20, 2008 3:02 pm Post subject: |
|
|
Hi Dick,
Thank you so much and it works great. |
|
| Back to top |
|
dick scherrer
Joined: 23 Nov 2006
Posts: 8733
Location: 221 B Baker St
|
| Posted: Wed Aug 20, 2008 9:01 pm Post subject: Reply to: how to find the count and divide by that many zero |
|
|
Hi Vidya,
You're welcome :)
Thank you for letting us know it is working.
d |
|
| Back to top |
|
| |
THIS IS AN ARCIVE FORUM IN READ ONLY MODE. IF YOU WANT TO ASK YOUR DOUBTS USE THE ACTUAL FORUM
|