View previous topic :: View next topic
|
Author |
Message |
davidllw
New User
Joined: 12 May 2005 Posts: 4 Location: China
|
|
|
|
Can we use DFSORT to search the dataset with a key word, and then replace it by the other word we specify?
i.e.
Input File A:
AAABBBCCDDDEEE
CCCAAABB
CEDCCC
run after the DFSORT coding
Ouput File B:
AAABBB11DDDEEE
111AAABB
1ED111
All 'CCC' change to '111'.
Thanks...
David |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
You say
Quote: |
All 'CCC' change to '111'. |
but in your example of input and output you show EVERY 'C' replaced by '1'.
This DFSORT job will give you the output you show by replacing every 'C' with '1'. I've assumed your input file has RECFM=FB and LRECL=80, but you can change the job appropriately for other attributes.
Code: |
//S1 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=... input file (FB/80)
//SORTOUT DD DSN=... output file (FB/80)
//SYSIN DD *
OPTION COPY
* Set up ALTSEQ table for TRAN=ALTSEQ.
* X'C3' = 'C'. X'F1' = '1'.
ALTSEQ CODE=(C3F1)
* Use TRAN=ALTSEQ to change 'C' (X'C3') to '1' (X'F1').
OUTREC FIELDS=(1,80,TRAN=ALTSEQ)
/*
|
|
|
Back to top |
|
|
davidllw
New User
Joined: 12 May 2005 Posts: 4 Location: China
|
|
|
|
Many Thanks...I'll try it tomorrow...:) |
|
Back to top |
|
|
davidllw
New User
Joined: 12 May 2005 Posts: 4 Location: China
|
|
|
|
Dear Frank,
I would like to ask one more stupid question. I never use the program highlight below. Is it still the DFSORT?
S1 EXEC PGM=ICEMAN |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
PGM=ICEMAN and PGM=SORT are ways to invoke the primary sort product at your site. If you have DFSORT as the primary sort product at your site, PGM=ICEMAN and PGM=SORT will invoke DFSORT. |
|
Back to top |
|
|
davidllw
New User
Joined: 12 May 2005 Posts: 4 Location: China
|
|
|
|
Frank, Thanks for your reply. I've tried your method. It do work. If I want to make a little change as follows. Can the DFSORT also solve it?
Change all 'C' to 'cat' and all 'B' to 'boys'. It means the length may extend.
i.e.
Input:
CAAAC
AACBBC
Output:
catAAAcat
AAcatboysboyscat
Regards,
David |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
DFSORT doesn't have any built-in functions for doing that kind of find and replace.
<It does as of July, 2008 - see my post later on> |
|
Back to top |
|
|
mohitsaini Warnings : 1 New User
Joined: 15 May 2006 Posts: 92
|
|
|
|
hello,
Actually I am looking for a replacement for '$' with space (1 Byte only). How do I do that ???
Actually I was referring to the ASCII table for hex equivalent but it was of not help ...
Any kind of help would be really appreciated.
- Mohit |
|
Back to top |
|
|
sril.krishy
Active User
Joined: 30 Jul 2005 Posts: 183 Location: hyderabad
|
|
|
|
Hi,
Try this.
Code: |
//S1 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD *
AAA$BBCCDDDEEE
CCC$AABB
CED$CC
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
* SET UP ALTSEQ TABLE FOR TRAN=ALTSEQ.
* X'5B' = '$'. X'40' = blank.
ALTSEQ CODE=(5B40)
* USE TRAN=ALTSEQ TO CHANGE '$' (X'5B') TO ' ' (X'40').
OUTREC FIELDS=(1,80,TRAN=ALTSEQ)
|
your o/p will look like
Code: |
AAA BBCCDDDEEE
CCC AABB
CED CC
|
Thank you
Krishy |
|
Back to top |
|
|
mohitsaini Warnings : 1 New User
Joined: 15 May 2006 Posts: 92
|
|
|
|
Hi Krishy,
It is working now.
Thanks a ton but tell me one thing .... what table are you are referring to figure out '$' as 5B ...
As I mentioned in my previous message that I referred the ASCII table but couldn't find what you got and what you got is working fine ... so plz do tell me what table you are referring to ???
Thanks once again.
Mohit |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
Quote: |
As I mentioned in my previous message that I referred the ASCII table but couldn't find what you got and what you got is working fine ... so plz do tell me what table you are referring to ???
|
The ASCII and EBCDIC character sets are different. You need to look at the EBCDIC values for ALTSEQ. Here's a link to a table that shows the ASCII characters on the left and the EBCDIC characters on the right:
www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/IBMp690/IBM/usr/share/man/info/en_US/xlf/html/lr425.HTM
If you go down the page on the right side, you'll see that blank is X'40' in EBCDIC and '$' is X'5B' in EBCDIC. So the ALTSEQ statement you need to change every '$' to a blank is:
|
|
Back to top |
|
|
sril.krishy
Active User
Joined: 30 Jul 2005 Posts: 183 Location: hyderabad
|
|
|
|
Hi,
The simple thing that I do generally is,open any member in EDIT mode and type the letter which you want to convert.
Then use the HEX on function and see it's hex value and use that one in
ALTSEQ CODE.
When you type $0 and use the HEX on ,you can see the values like this.
54
b0
Thank you
Krishy |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
Krishy,
Good suggestion. I often do that too. |
|
Back to top |
|
|
vinoth_316
New User
Joined: 20 Jun 2006 Posts: 4
|
|
|
|
Hi all
I am new to Mainframes, I have a doubt similar to the question in this thread. I need to find out the low and high values in a file and replace them by space. Any help??? |
|
Back to top |
|
|
mohitsaini Warnings : 1 New User
Joined: 15 May 2006 Posts: 92
|
|
|
|
What if I want to replace two chars at a time
For example if I want to replace '$' with '0' (zero) and ' '(space) with '0'.
so the input file
abc$a888 9999
would look like:
abc0a88809999
How can we do this in just one step.
Rgds,
Mohit |
|
Back to top |
|
|
mohitsaini Warnings : 1 New User
Joined: 15 May 2006 Posts: 92
|
|
|
|
well I am just replying to my post ...
two replacementw would be done like
ALTSEQ CODE=(5BF0,40F0)
also we can have more separated by commas
Thanks,
Mohit |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
vinoth_316 wrote
Quote: |
I have a doubt similar to the question in this thread. I need to find out the low and high values in a file and replace them by space. |
If by low values you mean X'00', and by high values you mean X'FF', you can use the DFSORT technique shown previously with:
Code: |
ALTSEQ CODE=(0040,FF40)
|
If you mean something else by low and high values, you need to be more specific about what exactly you mean. |
|
Back to top |
|
|
vinoth_316
New User
Joined: 20 Jun 2006 Posts: 4
|
|
|
|
Hi Frank,
By low values and high values, I do not mean 00 and FF. One of my friends said to find out low values, the command " F P'.' " can be used and this command shows low values in the form of dots, but the hex value of these dots vary(to name some 12, 2D, 05 etc).
Similarly is there any command to find out the high values and also how to replace such characters using space.
Thanks
Vinoth |
|
Back to top |
|
|
IQofaGerbil
Active User
Joined: 05 May 2006 Posts: 183 Location: Scotland
|
|
|
|
I think what you are describing is the picture-string FIND command for 'invalid' characters
and that what you want to do is change those characters with spaces.
In ISPF edit you would do it such;
C p'.' ' ' all
are you looking for a batch method to do this? |
|
Back to top |
|
|
vinoth_316
New User
Joined: 20 Jun 2006 Posts: 4
|
|
|
|
Hi all,
Yes, I want to replace the invalid characters with blank space, any batch method to do that would be really helpful.
Thanks,
Vinoth |
|
Back to top |
|
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
Quote: |
Frank, Thanks for your reply. If I want to make a change as follows. Can the DFSORT also solve it?
Change all 'C' to 'cat' and all 'B' to 'boys'. It means the length may extend.
i.e.
Input:
CAAAC
AACBBC
Output:
catAAAcat
AAcatboysboyscat
Regards,
David
|
You can now use DFSORT's new FINDREP function available with z/OS DFSORT V1R5 PTF UK90013 (July, 2008) to do this kind of thing quite easily like this:
Code: |
//S1 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=... input file
//SORTOUT DD DSN=... output file
//SYSIN DD *
OPTION COPY
INREC FINDREP=(INOUT=(C'C',C'cat',C'B',C'boys'))
/*
|
For complete details on the new FINDREP function and the other new functions available with PTF UK90013, see:
Use [URL] BBCode for External Links |
|
Back to top |
|
|
|