IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Interchange columns


IBM Mainframe Forums -> DFSORT/ICETOOL
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
dinesh_deadman
Warnings : 1

New User


Joined: 10 Aug 2007
Posts: 32
Location: Chicago

PostPosted: Wed Oct 08, 2008 9:17 pm
Reply with quote

Hello...

I have an input file of format 4092 VB.

COL-1 COL-2 COL-3
------- ------- --------
AAAA BBBB 1111
CCCC DDDD 2222
EEEE FFFF 3333

Output file should look like,

COL-1 COL-2 COL-3
------- ------- --------
AAAA 1111 BBBB
CCCC 2222 DDDD
EEEE 3333 FFFF

Can this be done in one sort step? Any help is highly appreciated.

Tx,
Dinesh Patel
Back to top
View user's profile Send private message
Frank Yaeger

DFSORT Developer


Joined: 15 Feb 2005
Posts: 7129
Location: San Jose, CA

PostPosted: Wed Oct 08, 2008 9:31 pm
Reply with quote

Yes, you can use DFSORT's INREC or OUTREC statement to do that.

If the VB input record looked like this (rrrr is the RDW):

rrrrAAAABBBB1111data

and you wanted the VB output record to look like this:

rrrrAAAA1111BBBBdata

you could use these DFSORT statements:

Code:

  OPTION COPY                         
  INREC BUILD=(1,8,9:13,4,13:9,4,17)   


It isn't clear what positions your fields are actually in. If you need more specific help, please give the starting position and length of each field (COL-1, COL-2 and COL-3) and indicate whether or not there are other fields after those three.
Back to top
View user's profile Send private message
dinesh_deadman
Warnings : 1

New User


Joined: 10 Aug 2007
Posts: 32
Location: Chicago

PostPosted: Wed Oct 08, 2008 9:42 pm
Reply with quote

My bad!

Record length - 202
Record format- VB

These are the final fields.

Starting & Ending Positions I want to be interchanged are,

Current:

Positions -> 192-194 - CHAR(03) or X(03)
-> 195-202 - CHAR(08) or X(08)

Proposed:

Positions -> 192-199 - CHAR(08) or X(08)
-> 200-202 - CHAR(03) or X(03)

Will this work?

OPTION COPY
INREC BUILD=(1,11,192:200,3,195:192,8,202)

Thanks,
Dinesh Patel
Back to top
View user's profile Send private message
Arun Raj

Moderator


Joined: 17 Oct 2006
Posts: 2481
Location: @my desk

PostPosted: Wed Oct 08, 2008 10:14 pm
Reply with quote

Dinesh,

Dont you want to copy fields from pos-12 to pos-191?
Back to top
View user's profile Send private message
dinesh_deadman
Warnings : 1

New User


Joined: 10 Aug 2007
Posts: 32
Location: Chicago

PostPosted: Wed Oct 08, 2008 10:23 pm
Reply with quote

I want to copy all the data in input file from 1 - 202 into output file with those two fields reformatted, in the sense interchanged positions.

Please let me know if this is not clear enough.
Back to top
View user's profile Send private message
Arun Raj

Moderator


Joined: 17 Oct 2006
Posts: 2481
Location: @my desk

PostPosted: Wed Oct 08, 2008 10:42 pm
Reply with quote

If I understand your requirement correctly, this should work for you. I have just modifed the previous suggestion as per your layout.

Code:
  OPTION COPY                         
  INREC BUILD=(1,191,192:195,8,200:192,3)
Back to top
View user's profile Send private message
dinesh_deadman
Warnings : 1

New User


Joined: 10 Aug 2007
Posts: 32
Location: Chicago

PostPosted: Thu Oct 09, 2008 12:02 am
Reply with quote

Thanks for the detailed response... but, for some reason it does not give me the desired results...

here is my JCL

//SORT1 EXEC PGM=ICEMAN
//SORTIN DD DSN=DBA.DS188.BMC.CM.DATA,DISP=SHR
//SORTOUT DD DSN=DBA.DS188.BMC.CM.DATA.OUTPUT,
// SPACE=(TRK,(1,1),RLSE),
// DISP=(NEW,CATLG,DELETE),
// DCB=(LRECL=202,RECFM=FB)
//SYSUDUMP DD SYSOUT=D
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC BUILD=(1,191,192:195,8,200:192,3)
/*

- -- -- -- -- -- -- -- -
Here is the input (only last fields can be seen)
****************
IFRSW< SPACES >
IFRSWUNKNOWN UNK
IFRSWUNKNOWN UNK

Here is the output...
****************
IFRSW< SPACES >
IFRSWNOWN UNKUNK
IFRSWNOWN UNKUNK

Desired output
****************
IFRSW< SPACES >
IFRSWUNKUNKNOWN
IFRSWUNKUNKNOWN



Could you tell where the problem is?

Dinesh Patel
Back to top
View user's profile Send private message
Frank Yaeger

DFSORT Developer


Joined: 15 Feb 2005
Posts: 7129
Location: San Jose, CA

PostPosted: Thu Oct 09, 2008 1:23 am
Reply with quote

You're getting the "wrong" answer because you're giving the "wrong" information. In all your previous posts, you said the input file has RECFM=VB. But based on your latest post where you use RECFM=FB for SORTOUT, and on the output you say you got with your INREC statement, it appears that your input file has RECFM=FB. Also, your previous descriptions of your fields do NOT match the data you are now showing.

Based on your latest post, this would be the DFSORT job you need:

Code:

//S1    EXEC  PGM=ICEMAN
//SYSOUT    DD  SYSOUT=*
//SORTIN DD DSN=...  input file (FB/202)
//SORTOUT DD DSN=...  output file (FB/202)
//SYSIN    DD    *
  OPTION COPY
  INREC BUILD=(1,191,192:200,3,195:192,8)
/*


In the future, please try to provide accurate information from the start.
Back to top
View user's profile Send private message
dinesh_deadman
Warnings : 1

New User


Joined: 10 Aug 2007
Posts: 32
Location: Chicago

PostPosted: Tue Oct 28, 2008 9:11 pm
Reply with quote

Frank,

I got a similar request again.

I am trying to move first 2 bytes of data to 10-11 position similarly
data from 3-11 position data should be moved to first two bytes. and am
trying below sort card - not sure what mistake I made - it says OVERLAPPING has occured

Current
-------
AA123456789

To be
-----
123456789AA


//SORT1 EXEC PGM=SORT
//SORTIN DD DSN=INFILE,DISP=SHR
//SORTOUT DD DSN=OUTFILE,
// SPACE=(CYL,(1,1),RLSE),
// DISP=(NEW,CATLG,DELETE),
// DCB=(LRECL=82,RECFM=FB)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC BUILD=(12,82,1:9,2,3:1,9)
/*

This time no goofing with details provided... :-)

Dinesh Patel
Back to top
View user's profile Send private message
Frank Yaeger

DFSORT Developer


Joined: 15 Feb 2005
Posts: 7129
Location: San Jose, CA

PostPosted: Tue Oct 28, 2008 9:32 pm
Reply with quote

Code:

  INREC BUILD=(12,82,1:9,2,3:1,9)


You got the overlapping message because you have overlapping fields. 12,82 copies input positions 12-93 to output positions 1-82. Then you have 1: which is less than 83 so you get the overlapping message.

Why are you using 12,82? Why are you using 9,2 and 1,9? Why are you using LRECL=82? None of this corresponds to what you said you want to do, and what you said you want to do doesn't make sense anyway.

The only thing that does make sense is your input/output record example. It shows that you want to move input positions 3-11 to output positions 1-9 and input positions 1-2 to output positions 10-11. To do that, you would use these DFSORT control statements:

Code:

  OPTION COPY               
  INREC BUILD=(1:3,9,10:1,2)


This will give you an output LRECL of 11.

I don't know what your input LRECL is or whether you want to copy the remaining characters (12-?) to the output records. If, for example, your input file has LRECL=80 and you want to copy the remaing characters to the output records, you would use:

Code:

  OPTION COPY               
  INREC BUILD=(1:3,9,10:1,2,12,69)
Back to top
View user's profile Send private message
dinesh_deadman
Warnings : 1

New User


Joined: 10 Aug 2007
Posts: 32
Location: Chicago

PostPosted: Tue Oct 28, 2008 10:04 pm
Reply with quote

Input - FB 82
Output - FB 77
First 9 bytes are spaces. I want to cut the length from 82 to 77.
Instead of last 5 bytes, I want to eliminate first 5 bytes.

Current:
--------
1 2 3 4 5 6 7 8 9 10 11 ...... 82
<first 9 spaces> A A ...... A

Output:
-------
1 2 3 4 5 6 7 8 9 10 11 .......77
<4 sp> A A A A A A .......A

Will this work?

OPTION COPY
INREC BUILD=(10:5,72)

Dinesh Patel
Back to top
View user's profile Send private message
Frank Yaeger

DFSORT Developer


Joined: 15 Feb 2005
Posts: 7129
Location: San Jose, CA

PostPosted: Tue Oct 28, 2008 10:25 pm
Reply with quote

Code:

  INREC BUILD=(10:5,72)


This will copy input bytes 5-76 to output bytes 10-81. I don't think that's what you want.

If the input data you want to keep starts at position 10 and you want it to start in output position 5, you would use:

Code:

   INREC BUILD=(5:10,73)
Back to top
View user's profile Send private message
dinesh_deadman
Warnings : 1

New User


Joined: 10 Aug 2007
Posts: 32
Location: Chicago

PostPosted: Tue Oct 28, 2008 10:55 pm
Reply with quote

It worked.

Thanks,
Dinesh Patel
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> DFSORT/ICETOOL

 


Similar Topics
Topic Forum Replies
No new posts Remote Unload of CLOB Columns DB2 6
No new posts Increase the number of columns in the... IBM Tools 3
No new posts DB2 Views with Multiple SQL & Col... DB2 8
No new posts SORT - To repeat a string in same col... SYNCSORT 3
No new posts JCL - To repeat a string in same colu... JCL & VSAM 2
Search our Forums:

Back to Top