Desde 12.200 personas han mirado a esta pregunta y no tiene una respuesta:
DFSORT y Syncsort son la unidad central predominante clasificar productos. Sus tarjetas de control tienen muchas similitudes y algunas diferencias.
JOINKEYS FILE=F1,FIELDS=(key1startpos,7,A)
JOINKEYS FILE=F2,FIELDS=(key2startpos,7,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:1,5200,F2:1,5200)
SORT FIELDS=COPY
A "JOINKEYS" está formado por tres tareas. La Subtarea 1 es la primera JOINKEYS. Subtarea 2 es el segundo JOINKEYS. La tarea principal sigue y es donde se procesan los datos unidos. En el ejemplo anterior, es una operación COPY simple. Los datos unidos simplemente se escribirán en SORTOUT.
La declaración JOIN define que, además de los registros coincidentes, los registros UNPAIRED F1 y F2 se deben presentar en la tarea principal.
La instrucción REFORMAT define el registro que se presentará en la tarea principal.Un ejemplo más eficiente, imaginando que se requieren tres campos de F2, es:
REFORMAT FIELDS=(F1:1,5200,F2:1,10,30,1,5100,100)
Cada uno de los campos en F2 se define con una posición de inicio y una longitud.
El registro que luego procesa la tarea Principal tiene 5311 bytes de largo, y los campos de F2 se pueden consultar en 5201,10,5211,1,5212,100 con el registro F1 en 1,5200.
Una forma mejor de lograr lo mismo es reducir el tamaño de F2 con JNF2CNTL.
//JNF2CNTL DD *
INREC BUILD=(207,1,10,30,1,5100,100)
Algunas instalaciones de Syncsort no son compatibles con JNF2CNTL, e incluso si son compatibles (de Syncsort MFX para la liberación z/OS 1.4.1.0 en adelante), no está documentado por Syncsort. Para los usuarios de 1.3.2 o 1.4.0, SyncSort ofrece una actualización para proporcionar el soporte de JNFnCNTL.
Se debe tener en cuenta que JOINKEYS clasifica por defecto los datos, con la opción IGUAL. Si los datos de un archivo JOINKEYS ya están en secuencia, se debe especificar SORTED. Para DFSORT NOSEQCHK también se puede especificar si no se requiere la verificación de secuencia.
JOINKEYS FILE=F1,FIELDS=(key1startpos,7,A),SORTED,NOSEQCHK
Aunque la solicitud es extraño, ya que el archivo de origen no podrá ser determinada, todos los registros no coincidentes son para ir a un archivo de salida independiente.
Con DFSORT, hay un marcador coincidente, especificado con? en la REFORMAT:
REFORMAT FIELDS=(F1:1,5200,F2:1,10,30,1,5100,100,?)
Esto aumenta la longitud del registro REFORMAT en un byte. Los ? se puede especificar en cualquier parte del registro REFORMAT, y no es necesario especificarlo. Los ? se resuelve mediante DFSORT a: B, datos de ambos archivos; 1, registro sin igual de F1; 2, registro sin igual de F2.
SyncSort no tiene el marcador de coincidencia. La ausencia o presencia de datos en el registro REFORMAT debe estar determinada por valores. Elija un byte en ambos registros de entrada que no pueden contener un valor particular (por ejemplo, dentro de un número, decida un valor no numérico). Luego, especifique ese valor como el carácter FILL en la REFORMAT.
REFORMAT FIELDS=(F1:1,5200,F2:1,10,30,1,5100,100),FILL=C'$'
Si la posición 1 en la F1 no puede, naturalmente, tienen "$" y la posición 20 en la F2 no pueden tampoco, entonces esas dos posiciones pueden ser utilizados para establecer el resultado del partido. El registro completo se puede probar si es necesario, pero absorbe más tiempo de CPU.
El requisito aparente es que todos los registros no coincidentes, desde F1 o F2, se escriban en un archivo. Esto requerirá una declaración REFORMAT que incluye tanto los registros en su totalidad:
DFSORT, salida de registros no coincidentes:
REFORMAT FIELDS=(F1:1,5200,F2:1,5200,?)
OUTFIL FNAMES=NOMATCH,INCLUDE=(10401,1,SS,EQ,C'1,2'),
IFTHEN=(WHEN=(10401,1,CH,EQ,C'1'),
BUILD=(1,5200)),
IFTHEN=(WHEN=NONE,
BUILD=(5201,5200))
Syncsort, salida de registros no coincidentes:
REFORMAT FIELDS=(F1:1,5200,F2:1,5200),FILL=C'$'
OUTFIL FNAMES=NOMATCH,INCLUDE=(1,1,CH,EQ,C'$',
OR,5220,1,CH,EQ,C'$'),
IFTHEN=(WHEN=(1,1,CH,EQ,C'$'),
BUILD=(1,5200)),
IFTHEN=(WHEN=NONE,
BUILD=(5201,5200))
La codificación para Syncsort también trabajar con DFSORT.
Para obtener los registros coincidentes escritos es fácil.
OUTFIL FNAMES=MATCH,SAVE
GUARDAR asegura que todos los registros no escritos por otro OUTFIL se escribirán aquí.
Se necesita reformatear, principalmente para generar datos de F1, pero para seleccionar algunos campos de F2. Esto funcionará para cualquiera DFSORT o Syncsort:
OUTFIL FNAMES=MATCH,SAVE,
BUILD=(1,50,10300,100,51,212,5201,10,263,8,5230,1,271,4929)
La cosa entera, con arranques y longitudes arbitrarias es:
DFSORT
JOINKEYS FILE=F1,FIELDS=(1,7,A)
JOINKEYS FILE=F2,FIELDS=(20,7,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:1,5200,F2:1,5200,?)
SORT FIELDS=COPY
OUTFIL FNAMES=NOMATCH,INCLUDE=(10401,1,SS,EQ,C'1,2'),
IFTHEN=(WHEN=(10401,1,CH,EQ,C'1'),
BUILD=(1,5200)),
IFTHEN=(WHEN=NONE,
BUILD=(5201,5200))
OUTFIL FNAMES=MATCH,SAVE,
BUILD=(1,50,10300,100,51,212,5201,10,263,8,5230,1,271,4929)
Syncsort
JOINKEYS FILE=F1,FIELDS=(1,7,A)
JOINKEYS FILE=F2,FIELDS=(20,7,A)
JOIN UNPAIRED,F1,F2
REFORMAT FIELDS=(F1:1,5200,F2:1,5200),FILL=C'$'
SORT FIELDS=COPY
OUTFIL FNAMES=NOMATCH,INCLUDE=(1,1,CH,EQ,C'$',
OR,5220,1,CH,EQ,C'$'),
IFTHEN=(WHEN=(1,1,CH,EQ,C'$'),
BUILD=(1,5200)),
IFTHEN=(WHEN=NONE,
BUILD=(5201,5200))
OUTFIL FNAMES=MATCH,SAVE,
BUILD=(1,50,10300,100,51,212,5201,10,263,8,5230,1,271,4929)
no es necesario dos pasos. No necesita ICETOOL. SORT con JOINKEYS lo hará. De lo que se describe, de todos modos. –