This document provides an overview of the SORT control statements and functions in IBM z/OS Syncsort including:
- SORT FLOW shows the basic processing flow of a SORT job
- STOPAFT and SKIPREC parameters control the number of records sorted/copied
- INCLUDE/OMIT allows filtering records based on specified conditions
- INREC reformats input records before sorting
- JOIN merges sorted data from two different files based on matching fields
- Other functions covered include OUTREC, SUM, DUPKEYS and OUTFIL reports
JCL
Job Control Language (JCL) is a name for scripting languages used On IBM mainframe operating systems to instruct the system on how to run a batch job or start a subsystem.
JCL acts as an interface between application programming and MVS Operating system.
Jcl is used for compilation and execution of batch programs.
Apart from the above functionalities JCL can also be used for,
1. Controlling the jobs.
2. Create GDG’S.
3. Allocate PDS,PS file with IBM Utilities.
4. Create Procs.
5. Sort the files.
JCL Coding Sheet
1,2,3----------Column Numbers----------72,73------------80
//JOBNAME JOB PARAMETERS------COMMENTS
// EXEC
// DD
//* ------------ Comment (* in 3rd column indicates line in comment)
//------------ End of JCL
Where // ----- Identification Field
job name------- Naming field
JOB,EXEC,DD - Statement / Operation
NOTE
If we want to continue parameters in the next line end the last parameter with “,” and continue next parameter only in 4-16 columns.
There are three statements in JCL.
JOB
EXEC
DD
JOB Statement:
Job statement is used to identify job name and job related parameters
JOBCARD = job name + job related parameters.
Syntax
//JOBNAME JOB ACCOUNT INFORMATION,’USERNAME’,CLASS=A-Z/0-9,
// NOTIFY =&SYSUID/RACF ID,MSGCLASS,
// MSGLEVEL=(X,Y),PRTY=0-15,
// TIME=(M,S),REGION=MB/KB,TYPRUN=SCAN/
// HOLD/COPY,COND=(RC,OPERATOR,STEPNAME)
// COND=ONLY OR COND=EVEN,RESTART=STEPNAME
JOBNAME
It is required to identify this job from other jobs in the SPOOL
1 to 8 characters minimum 1 character and maximum is 8 character.
1st character must be alphabet.
Other characters can be alphabets or numeric or $,&,#.
Example
Job names for personal or lab sessions
Userid + 1 / 2 chars
KC03P83$ ------- Userid is KC03P83
KC03P84&--------Userid is KCO3P84
ACCOUNTING INFORMATION
It is a keyword parameter and codes it after JOB statement.
It is used for billing purpose, in real time when we submit any job it is going to take some CPU time. Based on the CPU time there will be some amount involved where this amount has to go will be decided by A/C information parameters.
Examples
(8012T)
(80121I)
(8012M)
USERNAME
It is used to identify the user who has written the JCL.
It can be maximum of 20 characters.
Note Both A/C information and user name are positional parameters and the remaining job
card parameters are keyword parameters.
EX1: //KC03P83A JOB (487A),’JANAKI RAM’
EX2: //KC03P84& JOB (488T),’SOMISETTY’
NOTIFY
To which user id the job has to be notification after successful or unsuccessful completion.
Successful completion means MAXCC = 0 (or) 04 unsuccessful completion means MAXCC > 04.
If it is not coded,then user has to check the status of the job from the spo
JCL
Job Control Language (JCL) is a name for scripting languages used On IBM mainframe operating systems to instruct the system on how to run a batch job or start a subsystem.
JCL acts as an interface between application programming and MVS Operating system.
Jcl is used for compilation and execution of batch programs.
Apart from the above functionalities JCL can also be used for,
1. Controlling the jobs.
2. Create GDG’S.
3. Allocate PDS,PS file with IBM Utilities.
4. Create Procs.
5. Sort the files.
JCL Coding Sheet
1,2,3----------Column Numbers----------72,73------------80
//JOBNAME JOB PARAMETERS------COMMENTS
// EXEC
// DD
//* ------------ Comment (* in 3rd column indicates line in comment)
//------------ End of JCL
Where // ----- Identification Field
job name------- Naming field
JOB,EXEC,DD - Statement / Operation
NOTE
If we want to continue parameters in the next line end the last parameter with “,” and continue next parameter only in 4-16 columns.
There are three statements in JCL.
JOB
EXEC
DD
JOB Statement:
Job statement is used to identify job name and job related parameters
JOBCARD = job name + job related parameters.
Syntax
//JOBNAME JOB ACCOUNT INFORMATION,’USERNAME’,CLASS=A-Z/0-9,
// NOTIFY =&SYSUID/RACF ID,MSGCLASS,
// MSGLEVEL=(X,Y),PRTY=0-15,
// TIME=(M,S),REGION=MB/KB,TYPRUN=SCAN/
// HOLD/COPY,COND=(RC,OPERATOR,STEPNAME)
// COND=ONLY OR COND=EVEN,RESTART=STEPNAME
JOBNAME
It is required to identify this job from other jobs in the SPOOL
1 to 8 characters minimum 1 character and maximum is 8 character.
1st character must be alphabet.
Other characters can be alphabets or numeric or $,&,#.
Example
Job names for personal or lab sessions
Userid + 1 / 2 chars
KC03P83$ ------- Userid is KC03P83
KC03P84&--------Userid is KCO3P84
ACCOUNTING INFORMATION
It is a keyword parameter and codes it after JOB statement.
It is used for billing purpose, in real time when we submit any job it is going to take some CPU time. Based on the CPU time there will be some amount involved where this amount has to go will be decided by A/C information parameters.
Examples
(8012T)
(80121I)
(8012M)
USERNAME
It is used to identify the user who has written the JCL.
It can be maximum of 20 characters.
Note Both A/C information and user name are positional parameters and the remaining job
card parameters are keyword parameters.
EX1: //KC03P83A JOB (487A),’JANAKI RAM’
EX2: //KC03P84& JOB (488T),’SOMISETTY’
NOTIFY
To which user id the job has to be notification after successful or unsuccessful completion.
Successful completion means MAXCC = 0 (or) 04 unsuccessful completion means MAXCC > 04.
If it is not coded,then user has to check the status of the job from the spo
I am working as a Assistant Professor in ITS, Ghaziabad.This slides is very useful for UPTU,UTU,JNU,BHU etc.please give feedback to me in friendly_rakesh2003@yahoo.co.in
Maintec Technologies provides affordable access to latest Mainframe infrastructure for development, training, additional short term capacity increases and outsourcing needs. Leverage our Mainframe infrastructure, without investing the time, expense and manpower it would take to build your own!.
A single pass assembler scans the program only once and creates the equivalent binary program. The assembler substitute all of the symbolic instruction with machine code in one pass.
Z4R: Intro to Storage and DFSMS for z/OSTony Pearson
This session covers basic storage concepts for z/OS operating system with examples for Flash, Disk and Tape devices and how to use DFSMS policy-based management. Presented at IBM TechU in Johannesburg, South Africa September 2019
This slide contains all the basic concepts of ISPF. It's giving the simple and easy step to get the knowledge of Interactive system productivity facility. If u like it then give me feedback on email anilbharti85@gmail.com Thanks v much.
A K Bharti
I am working as a Assistant Professor in ITS, Ghaziabad.This slides is very useful for UPTU,UTU,JNU,BHU etc.please give feedback to me in friendly_rakesh2003@yahoo.co.in
Maintec Technologies provides affordable access to latest Mainframe infrastructure for development, training, additional short term capacity increases and outsourcing needs. Leverage our Mainframe infrastructure, without investing the time, expense and manpower it would take to build your own!.
A single pass assembler scans the program only once and creates the equivalent binary program. The assembler substitute all of the symbolic instruction with machine code in one pass.
Z4R: Intro to Storage and DFSMS for z/OSTony Pearson
This session covers basic storage concepts for z/OS operating system with examples for Flash, Disk and Tape devices and how to use DFSMS policy-based management. Presented at IBM TechU in Johannesburg, South Africa September 2019
This slide contains all the basic concepts of ISPF. It's giving the simple and easy step to get the knowledge of Interactive system productivity facility. If u like it then give me feedback on email anilbharti85@gmail.com Thanks v much.
A K Bharti
A command macro is a text file that contains one or more commands and/or command macro statements and that has a name ending with the suffix .cm. You invoke a macro by entering its name. The operating system then sequentially executes the commands and macro statements in the file.
A command macro is useful to replace one of the following:
a long command string that you issue frequently
a group of internal commands, command macros, and/or program modules that together perform an operation you regularly require
a sequence of internal commands, command macros, and/or program modules that you execute in a certain way depending on external factors
Easytrieve plus is an information retrieval and data management system. It is a primitive form of 4GL whose English like language and simple syntax provide the tools for easy data retrieval and report generation, Easytrieve Plus can now produce reports in HTML format. This feature allows you to create reports that can be viewed either from a local disk or LAN or from a World Wide Web server using the Web browser.
PLI Presentation for Mainframe Programmers. PL/I is one of the prominent language being used in Mainframe after COBOL. Still PLI being used in many banking and financial projects.
Presentation about how your diet can change your life, improve your health, and help resolve the world's most challenging environmental problems.
Feel free to embed this presentation on your blog or web site.
a) In the code, board is initialized by reading an input file. But y.pdfanuradhasilks
a) In the code, board is initialized by reading an input file. But you have not specified the format
of input file nor have given any sample input file. For implementing check_move() and
move_checker() functions fully, it is required to be aware of input file specification and checker
game specification.
b) Among different files, code can be organised as shown below. There were some errors also in
the code that are also removed.
a) square.cpp:
---------------------------------------
#ifndef SQUARE_H_
#define SQUARE_H_
enum color {
empty, red, blue
};
enum chip_rank {
notking, king
};
//square class
class square {
public:
square() :
chip_color(empty), chip_status(notking) {
}
bool isEmpty();
void make_empty();
bool add_chip(color c, chip_rank r);
color get_color();
chip_rank get_rank();
private:
color chip_color;
chip_rank chip_status;
};
#endif /* SQUARE_H_ */
-----------------------------------------
2. square.cpp:
----------------------------------------
#include \"square.h\"
//implementation of square class
color square::get_color() {
return chip_color;
}
chip_rank square::get_rank() {
return chip_status;
}
bool square::isEmpty() {
return (empty == chip_color);
}
void square::make_empty() {
chip_color = empty;
}
bool square::add_chip(color c, chip_rank r) {
if (!isEmpty())
return false;
else {
chip_color = c;
chip_status = r;
return true;
}
}
--------------------------------------
3. board.h
--------------------------------------
#ifndef BOARD_H_
#define BOARD_H_
#include
#include
#include
#include
#include
#include
#include \"square.h\"
using namespace std;
//class Board
class Board {
public:
Board(int);
void print_board();
char print_chip(int row, int col);
bool read_board(ifstream & fin);
bool make_move(int row1, int col1, int row2, int col2);
bool check_move(int row1, int col1, int row2, int col2);
void move_checker(int row1, int col1, int row2, int col2);
private:
vector > c_board;
int size;
};
#endif /* BOARD_H_ */
-----------------------------------------------
4. board.cpp:
-------------------------------------------------
#include \"board.h\"
//implementation of Board class
Board::Board(int dim) {
square csquare;
size = dim;
vector row;
for (int i = 0; i < size; i++)
row.push_back(csquare);
for (int i = 0; i < size; i++)
c_board.push_back(row);
}
char Board::print_chip(int row, int col) {
char c;
if (c_board[row][col].isEmpty())
return \' \';
else if (c_board[row][col].get_color() == red) {
if (c_board[row][col].get_rank() == notking)
return \'r\';
else
return \'R\';
} else {
if (c_board[row][col].get_rank() == notking)
return \'b\';
else
return \'B\';
}
}
void Board::print_board() {
string dashes = \"+---\", spaces = \"| \", stars = \"|***\";
string line, filler;
int i, j, pat;
for (i = 0; i < size; i++) {
//cell top boundary
line = \"\";
for (j = 0; j < size; j++) {
line = line + dashes;
}
cout << line + \"+\" << endl;
pat = (i) % 2;
//row 1 of cell
line = \"\";
for (j = 0; j < size; j++) {
if ((j + pat) % 2) {
filler = spaces;
.
IMAX3: Amazing Dataflow-Centric CGRA and its Applications
I present this slide to all hungry engineers who are tired of CPU, GPU, FPGA, tensor core, AI core, who want some challenging one with no black box inside, and who want to improve by themselves.
To Compute GCD and LCM String Manipulation , Operations on string length, concatenation, reverse, counting, and copy of a string to another, Matrices, Matrix Addition, Subtraction, Multiplication, Transpose of n x m matrices, Inverse of a square matrix, Searching, Binary Search,GCD , LCM String Manipulation , Operations STRING,string length, concatenation, reverse, counting, copy of a string, Matrices, Matrix Addition, Subtraction, Multiplication, Transpose,n x m matrices, Inverse MATRIX,square matrix, Searching, Binary Search,C PROGRAM,C,PROGRAMMING,SIMPLE C, EXAMPLE C,LAB PROGRAMS,LAB, C EXERCISES,thiruvalluvar university,lab manual,c lab manual
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
3. Basic Points
The first byte of every fixed-length record is position 1, the second byte position 2, and so on.
Bytes 1 through 4 of variable-length records are reserved for the Record Descriptor Word
(RDW). For these records, the first byte of the data portion is position 5.
When proper processing depends on data format, the format of the field must be specified.
The format of the field must be appropriate to the task. For example, only numeric fields can
be SUMmed.
When all the fields have the same format, the format value can be specified just once through
the FORMAT=f subparameter. The FORMAT=f subparameter cannot be used when the
INCLUDE/OMIT parameter is specified on the OUTFIL control statement.
Identify a comment card image by placing an asterisk (*) in column 1. Comments can
extend through column 80.
To add a comment to a control statement card image, leave one or more blanks after the
last parameter or comma on the image and follow with the comment, which can extend
through column 71.
4. Basic Points Contd…
Comment lines can be inserted between a control statement and its continuation by
coding an asterisk (*) in column one.
COL. 72
↓
SORT FIELDS=(1,10,A,20,5,A,45,7,A),FORMAT=CH,STOPAFT=100, *COMMENT
EQUALS
In the above example, no continuation character is required. The control statement is
interrupted after a parameter-comma combination before column 72.
COL. 16 COL.72
↓ ↓
OUTFIL OUTREC=(1:10,8,30:40,10),HEADER2=(1:'CUSTOMER NUMBX
ER',30:'ITEM NUMBER')
In this example, a continuation character is necessary because the literal string in the
HEADER2 specification would extend beyond column 71. The 'X' in column 72 is the
continuation character. The literal string is continued in column 16 of the next card image.
6. SORT FLOW
BEFORE SORT SORT AFTER SORT
SORTIN
SUM / DUPKEYS
SKIPREC
E15 OUTREC
JOIN SORT E35
INCLUDE/OMIT OUTFIL
SORTOUT
STOPAFT
INREC
7. STOPAFT
STOPAFT Parm
STOPAFT=n
STOPAFT=n (a decimal number) sorts/copies at most n records.
These will be the first n records after any input processing due to an E15, an
INCLUDE/OMIT statement, or the SKIPREC parameter.
If STOPAFT=n has been specified on the SORT control statement as well as
in the PARM field, the PARM specification will take precedence.
//SORT EXEC PGM=SORT,PARM=‘STOPAFT=100'
or
SORT FIELDS=COPY,STOPAFT=100
First 100 records will be taken and remaining records will be skipped. These
100 will be send to next control of SORT for processing.
8. SKIPREC
SKIPREC Parm
SKIPREC=n
SKIPREC=n instructs the sort to skip a decimal number n of records before
sorting/copying the input file.
The records skipped are deleted from the input file before E15 and
INCLUDE/OMIT processing is begun.
If SKIPREC=n has been specified on the SORT control statement as well as
in the PARM field, the PARM specification will take precedence.
//SORT EXEC PGM=SORT,PARM='SKIPREC=100'
or
SORT FIELDS=COPY,SKIPREC=100
First 100 records will be skipped and remaining records will be send to
SORT for processing.
10. INCLUDE / OMIT
INCLUDE/OMIT COND=ALL / NONE /COMPARISION
INCLUDE COND=((1,4,CH,EQ,C'1995',OR,1,4,CH,EQ,C'1996‘),AND,5,5,CH,EQ,C'PARIS')
INCLUDE COND=(1,4,CH,EQ,10,4,CH) OR (1,4,EQ,10,4),FORMAT=CH
INCLUDE COND=(15,3,ZD,EQ,100,AND,20,1,CH,NE,X'40')
INCLUDE COND=(35,8,ZD,LE,&DATE1,AND,45,8,ZD,GT,&DATE1-14)
If you have multiple strings to search:
(1,4,CH,EQ,L(C'1995',C'1996‘) OR (1,40,SS,EQ,L(C'1995',C'1996‘))
Numeric Check
INCLUDE COND=(35,8,ZD,EQ,NUM)
SORTIN (FB RECORD)
----+----1----+----2----+----3----+----4----+----5----+
1995PARIS1997 100 R
1996LONDN1996 ANYTOWN
1997CINCI1998 200 ANYTOWN
1999INDIA1999 20120220 20120218
Options vlscomp
11. INREC
The INREC control statement reformats the input records.
Use the INREC control statement to add, delete, or reformat fields before the records are sorted or
merged.
Except for CONVERT, all the functions performed by the OUTREC control statement, such as
inserting character strings or changing the data format of a numeric field, can also be performed by
the INREC control statement.
Note: that INREC is performed after E15 exit processing and INCLUDE/OMIT control statement
processing.
INREC FIELDS=(1,15,20,5)
SORTIN SORTOUT
----+----1----+----2----+----3 ----+----1----+----2
ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOTUVWX
INREC FIELDS=(1,4,5,9,ZD,PD,X,20,5) Variable Block (1,4 RECORD LENGTH)
SORTIN SORTOUT (HEX ON)
----+----1----+----2----+----3 ----+----1----+
123456789RAMA ABCDEFGHI î̤ ABCDE
135794CCCCC
2468F012345
12. INREC contd…
INREC IFTHEN=(WHEN=INIT,BUILD=(1,15,C’CVG’,19,27)),
IFTHEN=(WHEN=(1,2,CH,EQ,C’NJ’),
BUILD=(1,30,C’NEW JERSEY’)),
IFTHEN=(WHEN=(1,2,CH,EQ,C’NY’),
OVERLAY=(31:C’NEW YORK ‘)),
IFTHEN=(WHEN=NONE,OVERLAY=(31:C’NO MATCH ‘))
SORTIN
----+----1----+----2----+----3----+----4----+----5----+
HYDERABAD INDIA
NJ USA
NY USA
PARIS
SORTOUT
----+----1----+----2----+----3----+----4----+
HYDERABAD CVG NO MATCH
NJ CVG NEW JERSEY
NY CVG NEW YORK
PARIS CVG NO MATCH
13. INREC contd…
INREC FIELDS=(1,7,SFF,TO=ZD,9,7,UFF,TO=PD) * SIGNED FREE FORM FORMAT
* UNSIGNED FREE FORM FORMAT
SORTIN SORTOUT (HEX ON)
----+----1----+----2----+----3 ----+----1-
-19.85 +20.05 000198L
FFFFFFD0005
0001985020F
INREC PARSE=(%1=(ENDBEFR=C',',FIXLEN=4), * STOCK SYMBOL (MAX LEN 4)
%2=(ENDBEFR=C',',FIXLEN=6), * CURRENT PRICE (MAX LEN 6)
%3=(FIXLEN=1), * SIGN OF TODAY'S CHANGE
%4=(ENDBEFR=C' ',FIXLEN=5)), * CHANGE AMOUNT (MAX LEN 5)
BUILD=(01:%1, * STOCK SYMBOL
07:%2,JFY=(SHIFT=RIGHT), * CURRENT PRICE
15:%3, * SIGN OF TODAY'S CHANGE
16:%4,JFY=(SHIFT=RIGHT)) * CHANGE AMOUNT
SORT FIELDS=(1,4,CH,A) * SORT BY STOCK SYMBOL
SORTIN SORTOUT
----+----1----+--- ----+----1----+-----
DIS,34.56,+1.09 DIS 34.56 + 1.09
T,37.05,-.42 GOOG 449.12 -11.62
GOOG,449.12,-11.62 T 37.05 - .42
** If you don’t want to store just say % in PARSE
14. JOIN
Using JOIN you can extract and sort data from two different files. One file point to
SORTJNF1 other point to SORTJNF2.
The join files do not need to be presorted on the fields specified on the
JOINKEYS statement. By default, SyncSort will sort the records to the proper
sequence before performing the join operation.
The FIELDS parameter is required. It describes the fields to be used to match records
from the two files, SORTJNF1 and SORTJNF2.
The number of JOINKEYS fields and their lengths and sorted order (A or D) must be
the same for both files, although their starting positions need not be the same.
Each JOINKEYS field may be anywhere within the record through column 32750,
the maximum length of a field is 4080 bytes, and the sum of all fields on a JOINKEYS
statement cannot exceed 4080 bytes.
For variable-length records, any JOINKEYS fields that are completely or partially
missing will be padded with binary zeros when performing the comparison.
15. JOIN Cntd..
//SORTJNF1 DD * //SORTJNF2 DD *
----+----1----+----2----+----3- ----+----1----+----2----+----3-
000001 0310.00 12/01/2002 2178I 7454C JOSEPH SMITH NY
000002 8055.22 12/02/2002 2123D 2111A JAMES JONES NJ
000003 0310.00 12/05/2002 2178I 2178I JOHN JACKSON DE
000004 0020.00 12/06/2002 2111A 2123D MARY LEE FL
JOINKEYS FILE=F1,FIELDS=(27,5,A)
JOINKEYS FILE=F2,FIELDS=(1,5,A)
REFORMAT FIELDS=(F1:16,11,1,7,8,8,27,6,F2:7,14,21,3) File1 File2
SORT FIELDS=COPY
OUTFIL FILES=01,HEADER2=('DATE ','TRANS# ','TRANAMT ',
'CUST# ','CUSTOMER NAME ','ADD')
DATE TRANS# TRANAMT CUST# CUSTOMER NAME ADD
12/06/2002 000004 0020.00 2111A JAMES JONES NJ
12/02/2002 000002 8055.22 2123D MARY LEE FL
12/05/2002 000003 0310.00 2178I JOHN JACKSON DE
12/01/2002 000001 0310.00 2178I JOHN JACKSON DE
16. JOIN Cntd..
//SORTJNF1 DD * //SORTJNF2 DD *
----+----1----+----2----+----3- ----+----1----+----2----+----3-
000001 0310.00 12/01/2002 2178I 7454C JOSEPH SMITH NY
000002 8055.22 12/02/2002 2123D 2111A JAMES JONES NJ
000003 0310.00 12/05/2002 2178I 2178I JOHN JACKSON DE
000004 0020.00 12/06/2002 2111A 2123D MARY LEE FL
JOINKEYS FILE=F1,FIELDS=(27,5,A) File1 File2
JOINKEYS FILE=F2,FIELDS=(1,5,A)
JOIN UNPAIRED,F2
REFORMAT FIELDS=(F1:16,11,1,7,8,8,27,6,F2:7,14,21,3),FILL=C’ ‘
SORT FIELDS=COPY
OUTFIL FILES=01,HEADER2=('DATE ','TRANS# ','TRANAMT ',
'CUST# ','CUSTOMER NAME ','ADD')
DATE TRANS# TRANAMT CUST# CUSTOMER NAME ADD
12/06/2002 000004 0020.00 2111A JAMES JONES NJ
12/02/2002 000002 8055.22 2123D MARY LEE FL
12/05/2002 000003 0310.00 2178I JOHN JACKSON DE
12/01/2002 000001 0310.00 2178I JOHN JACKSON DE
JOSEPH SMITH NY
17. JOIN contd…
File1 File2
File1 File2 File1 File2 File1 File2
Left Outer Join Right Outer Join Full Outer Join
JOIN
JOIN UNPAIRED,F1 JOIN UNPAIRED,F2 JOIN UNPAIRED UNPAIRED,ONLY
JOIN UNPAIRED [,F1] [,F2] [,ONLY]
To retain unpaired records from SORTJNF1 (a “left outer join”) in addition to all joined records,
JOIN UNPAIRED,F1
To retain unpaired records from SORTJNF2 (a “right outer join”) in addition to all joined records.
JOIN UNPAIRED,F2
To retain unpaired records from both SORTJNF1 and SORTJNF2 (a “full outer join”) in addition to all joined records,
JOIN UNPAIRED,F1,F2
or simply:
JOIN UNPAIRED
You have the option of discarding the paired records from a join and keeping only the unpaired ones.
JOIN UNPAIRED,ONLY
18. SUM
The SUM control statement specifies that, whenever two records are found with equal
sort control fields, the contents of their summary fields are to be added, the sum is to be
placed in one of the records and the other record is to be deleted.
If the EQUALS option is in effect the first record of summed records is kept.
If the NOEQUALS option is in effect, the record to be kept is unpredictable.
SORT FIELDS=(1,3,CH,A),EQUALS
SUM FIELDS=(7,4,ZD),XSUM
SUM FIELDS=NONE,XSUM
SORTIN: SORTOUT: SORTXSUM:
----+----1-- ----+----1-- ----+----1--
111 1 0001 1 111 1 0003 1 111 2 0001 2
111 2 0001 2 222 1 0001 1 111 3 0001 3
111 3 0001 3 333 1 0001 1 444 4 0001 4
222 1 0001 1 444 3 0003 2 444 2 0001 2
333 1 0001 1
444 3 0001 2
444 4 0001 4
444 2 0001 2
19. DUPKEYS
The DUPKEYS control statement deletes all records with duplicate SORT control
fields and optionally replaces specified numeric fields in the retained records with
calculated sum, minimum, maximum, or average values from all records with equal
control fields.
The deleted records can optionally be written to a separate output file (using XDUP).
SORT FIELDS=(1,3,CH,A),EQUALS
DUPKEYS SUM=(7,4),MIN=(5,1),MAX=(12,1),FORMAT=ZD,XDUP
DUPKEYS FIELDS=NONE,XDUP
SUM,MIN,MAX may not overlap each other.
SORTIN: SORTOUT: SORTXDUP:
----+----1-- ----+----1-- ----+----1--
111 1 0001 1 111 1 0003 3 111 2 0001 2
111 2 0001 2 222 1 0001 1 111 3 0001 3
111 3 0001 3 333 1 0001 1 444 4 0001 4
222 1 0001 1 444 2 0003 4 444 2 0001 2
333 1 0001 1
444 3 0001 2
444 4 0001 4
444 2 0001 2
20. MODS (EXIT module…)
MODS E15=(E15COBOL,9999,MODLIB,C), E35=(E35COBOL,999999,STEPLIB,C)
An E15 exit is the first exit routine. E15COBOL is the member name of the routine,
which requires 9999 bytes in main storage and resides in a library referenced by the DD
statement named MODLIB. The routine does not require link-editing.
An E35 exit is the third exit routine. E35COBOL is the member name of the routine,
which requires 999999 bytes in main storage and resides in a library referenced by the DD
statement named STEPLIB. This routine is a COBOL exit which has been link-edited
before execution time.
C The C value identifies a COBOL exit routine. COBOL exits must be link-edited before execution time.
Only COBOL E15 and E35 exits can be specified.
E The E value identifies a C exit routine. C exits must be link-edited before execution time.
Only C E15 and/or E35 exits can be specified.
X The X value identifies a REXX exit routine.
Only REXX E15 and E35 exits can be specified.
You can name the referenced DD name as you wish (MODLIB / STEPLIB / RKLIB …)
22. MODS
Cobol Exit module Example..
NO SELECT STATEMENT FOR THE INPUT, HANDLED BY SYNCSORT
01 EXIT-STATUS PIC 9(08) COMP.
88 FIRST-RECORD VALUE 00.
88 NORMAL VALUE 04.
88 LAST-RECORD VALUE 08.
01 RECORD-FROM-SORT.
05 INPUT-RECORD OCCURS 1 TO 968 TIMES
DEPENDING ON INPUT-LENGTH PIC X(01).
01 RECORD-TO-SORT.
05 OUTPUT-RECORD OCCURS 1 TO 968 TIMES
DEPENDING ON OUTPUT-LENGTH PIC X(01).
01 IN-BUF PIC X(01).
01 DUMMY PIC X(01).
01 INPUT-LENGTH PIC 9(08) COMP.
01 OUTPUT-LENGTH PIC 9(08) COMP.
PROCEDURE DIVISION USING EXIT-STATUS,
RECORD-FROM-SORT,
RECORD-TO-SORT,
IN-BUF,
DUMMY,
INPUT-LENGTH,
OUTPUT-LENGTH
23. OUTREC
The OUTREC control statement reformats the output records.
Use the OUTREC control statement to add, delete, or reformat fields after the records are
sorted or merged.
Including CONVERT, all the functions performed by the INREC control statement, such as
inserting character strings or changing the data format of a numeric field, can also be
performed by the OUTREC control statement.
Note: that OUTREC is performed before E35 exit processing.
OUTREC FIELDS=(1,15,20,5)
SORTIN SORTOUT
----+----1----+----2----+----3 ----+----1----+----2
ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOTUVWX
OUTREC FIELDS=(5,9,ZD,PD,X,20,5),CONVERT * CONVERT FROM VB TO FB
SORTIN SORTOUT (HEX ON)
----+----1----+----2----+----3 ----+----1-
123456789RAMA ABCDEFGHI î̤ ABCDE
135794CCCCC
2468F012345
24. OUTREC
SORT FIELDS=COPY
* ENSURE A VALID POSITIVE ZD VALUE IN 4-8 HAS AN F SIGN.
OUTREC IFTHEN=(WHEN=(4,5,ZD,EQ,NUM),
OVERLAY=(4:4,5,ZD,TO=ZDF,LENGTH=5),HIT=NEXT),
* REPLACE AN INVALID ZD VALUE IN 4-8 WITH 00000.
IFTHEN=(WHEN=(4,5,ZD,NE,NUM),
OVERLAY=(4:C'00000'),HIT=NEXT),
* ENSURE A VALID POSITIVE ZD VALUE IN 10-14 HAS AN F SIGN.
IFTHEN=(WHEN=(10,5,ZD,EQ,NUM),
OVERLAY=(10:10,5,ZD,TO=ZDF,LENGTH=5),HIT=NEXT),
* REPLACE AN INVALID ZD VALUE IN 10-14 WITH 00000.
IFTHEN=(WHEN=(10,5,ZD,NE,NUM),
OVERLAY=(10:C'00000'))
SORTIN SORTOUT
----+----1---- ----+----1----
R1 1234E 862-3 R1 12345 00000
R2 582B3 2832C R2 00000 28323
R3 0521L 87103 R3 0521L 87103
R4 68200 9862S R4 68200 00000
R5 7123T 0032J R5 00000 0032J
R6 X0521 72013 R6 00000 72013
25. OUTREC
Here's how you could change all low values (X'00') to spaces (X'40'),
ALTSEQ CODE=(0040)
OUTREC FIELDS=(1,2,TRAN=ALTSEQ, CH - change zeros to spaces
21,5, PD field - no change
26,55,TRAN=ALTSEQ) CH - change zeros to spaces
Note: By not using TRAN=ALTSEQ for the PD field, we avoid changing PD values
incorrectly, such as from X'000000001C' (P'1') to X'404040401C' (P'404040401').
26. OUTFIL
The OUTFIL control statement describes the output file(s). It is required to accomplish
these three tasks:
Create multiple output files. The OUTFIL parameters associated with this task are
CONVERT, ENDREC, FILES, FNAMES, FTOV, INCLUDE/OMIT, NULLOFL,
OUTREC, REPEAT, SAMPLE, SAVE, SPLIT, SPLITBY, SPLIT1R, STARTREC,
VLFILL, and VLTRIM.
Use the Sort Writer facility. The OUTFIL parameters associated with this task are
HEADER1, HEADER2, LINES, NODETAIL, REMOVECC, SECTIONS, TRAILER1,
and TRAILER2.
Reformat records after E35 processing. The OUTFIL parameter associated with this
task is OUTREC.
27. OUTFIL
Convert VB file to FB file and return return-code 4 when no records
INCLUDE COND=(400,28,CH,EQ,C'ERROR SENDING TO ACT MANAGER',AND,
291,6,Y2W,EQ,Y'DATE1'-1)
SORT FIELDS=COPY
OUTFIL FILES=01,VTOF,OUTREC=(01:192,14,15:C',',
16:400,28),NULLOFL=RC4
** VTOF/CONVERT are same , FTOV is for FB to VB
Editing Masks for Zone Decimal / Pack Decimal
INCLUDE COND=(196,2,CH,EQ,C'G2')
SORT FIELDS=(196,2,CH,A,214,2,CH,A)
SUM FIELDS=(51,7,ZD,207,7,PD)
OUTFIL FILES=01,OUTREC=(01:196,2,3:C',',04:214,2,6:C',',
07:51,7,ZD,EDIT=(TTTTTTT.TT),17:C',',
18:207,7,PD,EDIT=(TTTTTTTTTT.TTT))
29. OUTFIL
OUTFIL FTOV,VLTRIM=C'*',OUTREC=(1,7,9:8,8)
This OUTFIL control statement uses FTOV to convert fixed-length records to
variable length records and VLTRIM to remove the specified type of trailing bytes
(in this case, asterisks).
Input Output Record Length
Records Records (with 4-byte RDW)
----+----1----+- +----1----+----2
RECORD1 ABC***** RECORD1 ABC 15
RECORD2 ABCDEF** RECORD2 ABCDEF 18
RECORD3 ABC****Z RECORD3 ABC****Z 20
OUTFIL VTOF,VLFILL=C'*‘,OUTREC=(5,16)
This OUTFIL control statement uses VTOF to convert variable-length records to
fixed length records and VLFILL to fill the specified type of trailing bytes
(in this case, asterisks).
Input Output Record Length
Records Records
+----1----+----2 ----+----1----+-
RECORD1 ABC RECORD1 ABC***** 16
RECORD2 ABCDEF RECORD2 ABCDEF** 16
RECORD3 ABC****Z RECORD3 ABC****Z 16
34. DATE
DATE1 – YYYYMMDD 5,Y2T C'yyddd' or Z'yyddd'
6,Y2T C'yymmdd' or Z'yymmdd'
DATE2 – YYYYMM
7,Y4T C'ccyyddd' or Z'ccyyddd'
DATE3 – YYYYDDD 8,Y4T C'ccyymmdd' or Z'ccyymmdd'
5,Y2W C'dddyy' or Z'dddyy'
DATE4 – yyyy-mm-dd-hh.mm.ss
6,Y2W C'mmddyy' or Z'mmddyy'
DT=(MDYor4) DTNS=(MDY) 7,Y4W C'dddccyy' or Z'dddccyy'
8,Y4W C'mmddccyy' or Z'mmddccyy'
TOJUL, TOGREG 3,Y2U P'yyddd'
WEEKDAY=CHAR3/CHAR9/DIGIT1 4,Y2V P'yymmdd'
4,Y4U P'ccyyddd'
CHAR3 – ‘SUN’ 5,Y4V P'ccyymmdd'
CHAR9 – ‘SUNDAY ‘ 3,Y2X P'dddyy'
4,Y2Y P'mmddyy'
DIGIT1 – 1 4,Y4X P'dddccyy'
5,Y4Y P'mmddccyy'
&DATEx and &DATEx(c) represent the current date as a character string (C'string') to which a field
can be compared.
&DATExP represents the current date as a decimal number (+n) to which a field can be compared.
Y'DATEx' represents the current date with a Y constant (Y'string') to which a field can be compared.
35. DATE contd…
* Convert a P'dddyy' input date to a C'ccyy/mm/dd' output date *Convert P'dddccyy' date can be edited to a C'ccyy-ddd' date
INREC BUILD=(21,3,Y2X,TOGREG=Y4T(/),X, OUTFIL BUILD=(1,4,Y4X(-))
* Convert a C'ccyymmdd' input date to a P'ccyyddd' output date * Convert a P'dddyy' input date to C'ccyy/mm/dd'
42,8,Y4T,TOJUL=Y4U,X, INREC BUILD=(21,3,Y2X,TOGREG=Y4T(/),X,
* Convert a C'mmddyy' input date to a C'yymmdd' output date •Convert a C'ccyymmdd' input date to P'ccyyddd'
11,6,Y2W,TOGREG=Y2T) 42,8,Y4T,TOJUL=Y4U,X,
* Convert a C'yyddd' input date to a C'dd/mm/ccyy' output date •Date Calculation
OUTFIL BUILD=(92,5,Y2T,DT=(DM4/),X, (5,8,ZD,LE,&DATE1P,AND,5,8,ZD,GT,&DATE1P-14)
* Convert a P'ccyyddd' input date to a C'mmddyy' output date INREC BUILD=(
53:32,4,Y4U,DTNS=(MDY)) 1,6,Y2W,TOJUL=Y4T,X,
1,6,Y2W,WEEKDAY=CHAR3,X,
* Convert a C'mmddccyy' date to a C'mmddccyy' date. 9,7,Y4T,TOGREG=Y4T(/),X,
OUTFIL BUILD=(34,8,Y4W,X, 9,7,Y4T,WEEKDAY=DIGIT1)
* Convert a P'ccyymmdd' date to a C'ccyy-mm-dd' date. The input records might be as follows:
13,5,Y4V,EDIT=(TTTT-TT-TT),X, 120409 1999014
051895 2003235
* Convert a C'dddccyy' date to a 4-byte BI dddccyy value. 999999 0000000
61,7,Y4W,TO=BI,LENGTH=4) 013099 1992343
Convert a Z'dddccyy' date to a C'ddd/ccyy' date. The output records would be as follows:
OUTFIL BUILD=(19,7,Y4W(/),X, 2009338 FRI 1999/01/14 5
2095138 WED 2003/08/23 7
* Convert a P'ccyymmdd' date to a C'ccyy-mm-dd' date. 9999999 999 0000/00/00 0
43,5,Y4V(-)) 1999030 SAT 1992/12/08 3
36. Accessing DB2 table
You can access DB2 tables using SORT. But you can issue only SELECT statement.
//SORT EXEC PGM=SYNCSORT,PARM='DB2=D2P2'
//STEPLIB DD DSN=SYS.DMSS.DB2D2P2.SDSNLOAD,DISP=SHR
//SORTOUT DD SYSOUT=*
//SORTDBIN DD *
SELECT ACRONYM, TRANS_CD_CLASS,
TRANS_CD_TYPE,
TRANS_CD_SUBTYPE,
TRANS_CD_PRORATE,
REVENUE_CD,
REVENUE_TEXT
FROM CSGDB2A.BTA3_TRANS_REV
WHERE ACRONYM = 'CBP';
/*
//SYSIN DD *
SORT FIELDS=COPY
/*
//SYSOUT DD SYSOUT=*