View previous topic :: View next topic |
Author |
Message |
gkreth Beginner
Joined: 28 May 2004 Posts: 29 Topics: 10
|
Posted: Fri Jun 04, 2004 10:18 am Post subject: COBOL: How to remove leading spaces from an alpha field. |
|
|
To all,
I have been trying to find a simple, elegant way to remove the leading spaces from an alpha field, and I'm striking out big-time.
It appears I'm going to have to redefine the alpha field as an array of single characters (shades of C!!) and loop though the array, doing byte-by-byte comparisons and moving to another array.
This really seems quite clunky; surely there's a better way?
If not, I'll probably dump the code into a subprogram and just call it....
Any help would be greatly appreciated!
--Greg |
|
Back to top |
|
|
kolusu Site Admin
Joined: 26 Nov 2002 Posts: 12375 Topics: 75 Location: San Jose
|
Posted: Fri Jun 04, 2004 11:01 am Post subject: |
|
|
You don't have redefine and check each and every byte to remove the leading spaces. You can simply use the Function UNSTRING and remove the spaces.
Code: |
01 WS-STR PIC X(20) VALUE ' BBXXXYYYY'.
01 WS-SPACE PIC X(20).
01 WS-FIELD PIC X(20).
UNSTRING WS-STR DELIMITED BY ALL SPACES INTO
WS-SPACE,WS-FIELD
DISPLAY 'WS-SPACE:' WS-SPACE
DISPLAY 'WS-FIELD:' WS-FIELD
|
Upon execuetion of this you will have
Code: |
WS-SPACE:
WS-FIELD:BBXXXYYYY
|
Hope this helps...
Cheers
Kolusu _________________ Kolusu
www.linkedin.com/in/kolusu |
|
Back to top |
|
|
gkreth Beginner
Joined: 28 May 2004 Posts: 29 Topics: 10
|
Posted: Fri Jun 04, 2004 1:14 pm Post subject: |
|
|
Kolusu,
Unfortunately, this does ot work if there are embedded spaces in the text string.
I did find a fairly useful alternative:
Code: | 01 RIGHTY PIC X(40) VALUE ' Text with leading spaces.'.
01 LEFTY PIC X(40).
01 I PIC 9(4) USAGE BINARY.
INSPECT RIGHTY TALLYING I FOR LEADING SPACE.
MOVE RIGHTY ( I + 1 : LENGTH OF RIGHTY - I ) TO LEFTY
DISPLAY 'RIGHTY:' RIGHTY
DISPLAY 'LEFTY: ' LEFTY |
It requires an additional tally field, but with only two statements, it's not too bad....
--Greg |
|
Back to top |
|
|
vini Intermediate
Joined: 12 Jan 2004 Posts: 240 Topics: 48 Location: Maryland
|
Posted: Fri Jun 04, 2004 1:14 pm Post subject: |
|
|
I guess Gregs situation is one where the number of Leading Blanks is a variable figure ...if not then the above solution is quite elegant. |
|
Back to top |
|
|
gkreth Beginner
Joined: 28 May 2004 Posts: 29 Topics: 10
|
Posted: Wed Jun 09, 2004 8:13 am Post subject: |
|
|
Vini is correct: The leading blanks can be variable. What I actually need to do is embed left-justified counters in text messages at the end of a job. For example:
Code: | NUMBER OF INPUT RECORDS READ: 7101
NUMBER OF OUTPUT RECORDS WRITTEN: 7099
NUMBER OF FILES READ: 1 |
The counters at the end of each line are numeric variables, but they must be left-justified in the text (this is a user requirement). If I use numeric masks with supression on the leading zeroes (i.e., PIC ZZZZ9), the text is still right-justified. In essense, I had to convert right-justified text to left-justified text.
Kolusu's UNSTRING suggestion would have worked just fine in this specific case, since the counters don't have embedded blanks. But I was trying to come up with a more-widely-applicable approach, one that could be used regardless of the text string's content or the number of leading blanks.
Thanks for the replies, everyone!
--Greg |
|
Back to top |
|
|
coolman Intermediate
Joined: 03 Jan 2003 Posts: 283 Topics: 27 Location: US
|
Posted: Mon Jun 14, 2004 4:28 pm Post subject: |
|
|
Gkreth,
Would JUST clause not help ?
Cheers,
Coolman.
________
Ford River Rouge Complex
Last edited by coolman on Sat Feb 05, 2011 1:37 am; edited 1 time in total |
|
Back to top |
|
|
gkreth Beginner
Joined: 28 May 2004 Posts: 29 Topics: 10
|
Posted: Tue Jun 15, 2004 3:54 pm Post subject: Right-Justify text (was: How to remove leading spaces from a |
|
|
Quote: | Gkreth,
Would JUST clause not help ?
Cheers,
Coolman. |
Coolman,
I'm not sure how it would help in LEFT-justifying some text, but it does bring up an interesting question/issue: I cannto seem to get the JUSTIFIED RIGHT clause to work correctly. Consider the following:
Code: | WORKING-STORAGE SECTION.
01 ORIG PIC X(80) VALUE SPACE.
01 RIGHT1 PIC X(80) JUSTIFIED RIGHT.
01 TEST1 PIC X(80) VALUE SPACE.
PROCEDURE DIVISION.
MOVE 'Some left-justified text' TO ORIG
MOVE ORIG TO RIGHT1
MOVE RIGHT1 TO TEST1
DISPLAY 'ORIG....: ' ORIG
DISPLAY 'RIGHT1..: ' RIGHT1
DISPLAY 'TEST1...: ' TEST1 |
This give me the following output:
Code: | ORIG....: Some left-justified text
RIGHT1..: Some left-justified text
TEST1...: Some left-justified text |
Does anyone have any idea what I'm doing wrong?
Thanks,
--Greg |
|
Back to top |
|
|
vini Intermediate
Joined: 12 Jan 2004 Posts: 240 Topics: 48 Location: Maryland
|
Posted: Wed Jun 16, 2004 3:30 pm Post subject: |
|
|
gkreth ,
Code: | Try this
WORKING-STORAGE SECTION.
01 RIGHT1 PIC X(30) JUSTIFIED RIGHT.
01 TEST1 PIC X(20) VALUE 'YOUR STRING OF 20 CHARS'.
PROCEDURE DIVISION.
MOVE TEST1 TO RIGHT1
DISPLAY 'RIGHT1..: ' RIGHT1
|
I havent tested , but it should give you following ..with 10 leading spaces with your text visibly right justified.
RIGHT1..:bbbbbbbbbbYOUR STRING OF 20 CHARS.
It seems the JUSTIFIED clause does not affect initial data settings (i.e., as specified by the VALUE clause). Its effective when you move an Item to a justified Item and when the Item lengths are different. |
|
Back to top |
|
|
gkreth Beginner
Joined: 28 May 2004 Posts: 29 Topics: 10
|
Posted: Tue Jun 22, 2004 3:04 pm Post subject: |
|
|
Vini,
I started a new thread on this, because it's confusing the heck outta me..... See the next message --Greg |
|
Back to top |
|
|
vini Intermediate
Joined: 12 Jan 2004 Posts: 240 Topics: 48 Location: Maryland
|
Posted: Wed Jun 23, 2004 10:00 am Post subject: |
|
|
Greg, Good to hear from ya , was wondering what happened , just had no time to test any of this stuff .It did confuse the heck out of me too when I had wanted to use it first time last year sometime ,had given up on it then. Seeing your post , got keen again though. |
|
Back to top |
|
|
|
|