JCL中的SORT

2024-03-17 20:20
文章标签 sort jcl

本文主要是介绍JCL中的SORT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • JCL中的SORT
    • 一 SORT语法
      • 1 、JOB CONTROL LANGUAGE
      • 2、控制选项
    • 二 SORT例子
      • 1、 一个SORT完整的输入和输出
      • 2、Sort STEP

JCL中的SORT

​ SORT是JCL里面非常一个功能,在3.4打开的数据集中输入SORT可以直接进行排序,这个名字叫做DATA Facility,用来对数据集进行SORT、COPY、MERGE,总的来说,很常见,注意,笔者这篇总结主要是FB的定长数据集,VB的变长数据集,暂未写上去

在这里插入图片描述

一 SORT语法

1 、JOB CONTROL LANGUAGE

EXEC🥂🎸:规定作业步参数

SYSOUTDD💝🎮:主要是输出执行信息,一些错误LOG会被这个送出来

SORTIN DD💃🕵:定义输入的待排序数据集

SORTOUT DD💃🕵:定义要排序完的待输入数据集,可以CATALOG为实体、可以设定为临时文件

SORTWKdd DD💃🕵:定义一些排序工作DATASET,看到那个dd就知道,这是成组出现的

/SORTWKdd DDDefines a work data set for a sort. Typically not needed, because DFSORT can allocate work data sets for a sort dynamically.
这句英文说了,我们通常是不需要这个参数,一般都是给SORT自动处理的,除非太大了,咱们SORT处理不了,扛不住了,才用这个STEP

SYSIN👨‍👨‍👧‍👦✊:定义一些控制信息

2、控制选项

SORT: 指定对数据集进行排序操作
MERGE: 指定对数据集进行合并操作
COPY: 指定对数据集进行拷贝操作
FIELDS: 指定排序键值的信息,格式为

A SORT statement that sorts the bookstore records by the course department field

 FIELDS=(起始位置,长度,升降序[,起始位置,长度,升降序]),FORMAT=数据类型

其中位置和长度都是以字节为单位,顺序可选的有 A:升序,D:降序,E:适用用户出口例程序
 FORMAT=指定键字的类型,可选项有 CH:字符,PD:压缩十进制,BI:二进制,AC:ASCII码型

RECORD:

RECORD 制御ステートメントは、次のような場合に必要です。

  • ユーザー出口でレコード長が変更される。
  • ユーザー出口ですべての入力レコードが提供される。
  • 従来のマージやテープ作業データ・セットのソートで、VSAM 入力が使用される。

TYPE和LENGTH都是可变的,TYPE分为F、V、D:固定長レコード処理,可変長レコード処理,ASCII 可変長レコード処理,LENGTH分为三级,笔者感觉风格像是三级缓存,就是有本书微机原理里面讲的,这几个长度在SORT里面要求相等

RECORD  TYPE=F,LENGTH=(120,120,120)

RECORD 制御ステートメント

其中L1、L2、L3的长度,下文也有一定说法。

>>-LENGTH=--(--------------------------------------------------->>--+-L1-------------------------------------------------------------------+-->+-+----+--,--L2--------------------------------------------------------+   | '-L1-'                                                               |   +-+----+--,--+----+--,--L3---------------------------------------------+   | '-L1-'     '-L2-'                                                    |   +-+----+--,--+----+--,--+----+--,--L4----------------------------------+   | '-L1-'     '-L2-'     '-L3-'                                         |   +-+----+--,--+----+--,--+----+--,--+----+--,--L5-----------------------+   | '-L1-'     '-L2-'     '-L3-'     '-L4-'                              |   +-+----+--,--+----+--,--+----+--,--+----+--,--+----+--,--L6------------+   | '-L1-'     '-L2-'     '-L3-'     '-L4-'     '-L5-'                   |   '-+----+--,--+----+--,--+----+--,--+----+--,--+----+--,--+----+--,--L7-'   '-L1-'     '-L2-'     '-L3-'     '-L4-'     '-L5-'     '-L6-'            >--)-----------------------------------------------------------><

二 SORT例子

1、 一个SORT完整的输入和输出

JCL code:(笔者对这个环境的配置有一丢丢感兴趣,下期试着配置一下)

***************************** Top of Data ******************************//SORTTEST JOB 'DDS1602',MSGCLASS=S,TIME=1440,NOTIFY=&SYSUID//STEP01 EXEC PGM=SORT//SYSOUT DD SYSOUT=*,OUTLIM=5000//SYSPRINT DD SYSOUT=*,OUTLIM=5000//SYSTSPRT DD SYSOUT=*,OUTLIM=5000//SYSUDUMP DD DUMMY//PLIDUMP DD DUMMY//SORTWK01 DD UNIT=SYSDA,SPACE=(TRK,(30),,CONTIG)//SORTWK02 DD UNIT=(SYSDA,SEP=SORTWK01),SPACE=(TRK,(30),,CONTIG)//SORTWK03 DD UNIT=(SYSDA,SEP=(SORTWK01,SORTWK02)),// SPACE=(TRK,(30),,CONTIG)//SORTIN DD DSN=DDS1602.XUWEN.DATA,DISP=SHR//SORTOUT DD DSN=DDS1602.XUWEN.DATAOUT,DISP=(MOD,CATLG,DELETE),// UNIT=SYSDA,SPACE=(TRK,(2,1),RLSE),// DCB=(RECFM=FB,LRECL=23,DSORG=PS)//SYSIN DD *SORT FIELDS=(10,10,CH,A),SKIPREC=1OMIT COND=(24,1,CH,EQ,C'F')SUM FIELDS=(20,04,ZD)OUTREC FIELDS=(10,10,20,4,C'END')/*//*SKIPREC=1 SKIP THE TOP 1 RECORD//*STOPAFT=1 JUST SELECT THE TOP 1 RECORD//*OMIT COND=(X,X,PD,LT,0) OMIT THE RECORD WHICH SATISFY THE CONDITION//***************************** Bottom of Data ****************************

输入数据:

----+----1----+----2----+----3----+Number---Name------Qty-FlagNumber1 Xuwen 1000SNumber2 Tony Lv 2000SNumber3 Hanbao Liu3000FNumber4 Xuwen 0111SNumber5 Tony Lv 0222FNumber6 Hanbao Liu0333S


  输出:

----+----1----+----2---Hanbao Liu0333ENDTony Lv 2000ENDXuwen 1111END

2、Sort STEP

The following is a typical example of JCL to run DFSORT.

//EXAMP    JOB  A492,PROGRAMMER
//SORT     EXEC PGM=SORT
//SYSOUT   DD   SYSOUT=A
//SORTIN   DD   DSN=A123456.SORT.SAMPIN,DISP=SHR
//SORTOUT  DD   DSN=SYSDA,SPACE=(CYL,(1,1))
//SORTOUT  DD   DSN=A123456.SORT.SAMPOUT,DISP=OLD
//SYSIN    DD   *SORT FORMAT=CH,FIELDS=(110,10,A,145,17,A,1,75,A)
/*

​ If you cannot fit your SORT statement (or any other DFSORT control statement) between columns 2 through 71, you can continue it on the next line. If you end a line with a comma followed by a blank, DFSORT treats the next line as a continuation. The continuation can begin anywhere between columns 2 through 71.

这个就是说,如果SORT KEY太多了,那么就连在后面第二行写

For example:

 SORT FORMAT=CH,FIELDS=(110,10,A,145,17,A,1,75,A)

这篇关于JCL中的SORT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820048

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

C/C++经典排序问题,sort函数使用

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 2.2.3 测试结果 3. 备注 1. 前言 大家在学习C语言的时候,是不是经常被排序算法折磨的很难那首,其实都是但是在C++中有专门的,排序函数,而且支持自定义排序算法。下面我就带大家看看,sort函数简单的数组排序中的应用。 2. 正文 2.1 问题 题目描述

Hive中order by,sort by,distribute by,cluster by的区别

一:order by order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间。关于order by的详细介绍请参考这篇文章:Hive Order by操作。 二:sort by sort by不是全局排序,其在数据进入reducer前完成排序,因此,如果用sort

list.sort实现根据对象的属性值对集合进行排序

list.sort实现根据对象的属性值对集合进行排序,如下所示List<Map<String,Object>> list = new ArrayList<>();Map<String,Object> map1 = new HashMap<>();map1.put("gz_id",1);map1.put("aaa","aaa");Map<String,Object> map2 = new H

HDU 1890 Robotic Sort

题意: 将一列数字排序  排序规则是  每次找到最小值的位置loc  将1~loc所有数字颠倒  然后删掉第一位  直到排好序  排序要求是稳定的 思路: 这题要做的是  寻找区间最小值位置  翻转区间  的操作  因此可以想到用splay 只需要每个节点记录一个small  就可以实现找到最小值位置 翻转区间操作就是将splay的超级头转到最上面使之成为根  再把loc转到根下面

Go-Sort(Cont)

倒序。 package mainimport ("fmt""sort")func main() {data := []string{"one", "two", "three", "four"}sort.Strings(data)fmt.Println(data) //[four one three two]sort.Sort(sort.Reverse(sort.StringSlice(data

sort对二维字符数组排序

转载自(http://blog.csdn.net/unimen/article/details/6843977) 由于二维字符数组的第二维没有赋值运算符,即不能对整个一维数组进行赋值,因此是无法直接对二维数组用sort进行排序的,解决办法有二种: 代码一: #include <iostream> #include <cstring> #include <algorithm> usin

Insertion Sort Integer Array Insertion Sort Linked List

Sort Integer Array using Insertion sort. //********************************************************************************************************/* Insertion Sort 原理:就是前面的sort部分全部是相对值,从后面拿一个元素,然后跟

Merge Sort Array and Merge Sort Linked List

Merge Sort Array: 看完stanford的 CS106B的video,https://www.youtube.com/watch?v=LlNawf0JeF0&list=PLnfg8b9vdpLn9exZweTJx44CII1bYczuk&index=55 醍醐灌顶; public class Solution {/*** @param A: an integer array* @