Нужна копия группы записей - PullRequest
0 голосов
/ 22 января 2019

Входной файл 1 [VB 1504 байта]

HEADER REC 2000A ..... REC1 .... REC2 .... 2300 .... REC3 .... REC4 ....,,RECN ...... 2000A REC1 .... REC2 .... 2300 .... REC3 .... REC4 .....,RECN ...

FILE2 [10 байт FB] 1234567891 9876544211

Я хочу скопировать запись, в которой 10-байтовый ключ в файле 2 совпадает с 10-байтовым ключом, присутствующим в записи, начиная с 2300. Положение ключа[15:10]

Если ключ соответствует записи копирования, начиная с 2000A до следующей записи 2000A.

Любые предложения ....

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Из вашего вопроса я понял, что вам нужны записи из файла VB1504, где записи начинаются с 2300 и соответствуют ключу из FB10. Вам понадобится операция соединения DFSORT / ICETOOL. Занимая заданные позиции; FILE1 является FB10, а FILE2 является VB1504; JCL вместе с картой SYSIN идет примерно так -

//JOBNAME  JOB 'DFSORT JOIN',CLASS=A,MSGCLASS=A,
//         NOTIFY=&SYSUID
//*
//SORTJOIN EXEC PGM=SORT
//SYSOUT   DD SYSOUT=*
//FILE1    DD DISP=SHR,DSN=FILE1
//FILE2    DD DISP=SHR,DSN=FILE2
//SORTOUT  DD DSN=OUTPUT.FILE,
//         DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
//         SPACE=(CYL,(10,10),RLSE),DCB=*.FILE2
//SYSIN    DD *
  JOINKEYS FILE=FILE1,FIELDS=(01,10,CH,A)
  JOINKEYS FILE=FILE2,FIELDS=(19,10,CH,A),
           INCLUDE=(05,04,ZD,EQ,2300)
  REFORMAT FIELDS=(F2:01,1504)
  OPTION   COPY
/*

Это даст вам неповторяющиеся записи из файла VB1504, где записи начинаются с 2300 и соответствуют ключу. Если вы хотите дублировать записи, измените OPTION COPY на OPTION EQUALS

0 голосов
/ 27 января 2019

Метод 1:

Open files.
Process header for 'File 1'.
Load 'File 2' into a 'lookup table'.
For each '2000A group' in 'File 1' until 'end of file'.  
    Set a 'record counter' to zero.  
    Load all records into a 'buffer table', until another '2000A' record
        or end of file is found, counting the number of records.  
    Locate the '2300' record in the 'buffer table'. (The location may be saved
        while loading the 'buffer table'.)  
    Search the 'lookup table' for a value matching the value in
        the '2300' record.  
    If a match is found.  
        Write the 'buffer table' to the output file.  
End of for each.
Close files.

Или, как предлагает NicC,

Метод 2:

Open files.
Process header for 'File 1'.
Load 'File 2' into a 'lookup table'.
For each '2000A group' in 'File 1' until 'end of file'.  
    Set the 'buffer table' 'record counter' to zero.  
    Load records into a 'buffer table', counting the number of records,
        until the '2300' record is found.  
    Search the 'lookup table' for a value matching the value in
        the '2300' record.  
    If a match is found.  
        Write the 'buffer table' to the output file.  
        Write the '2300' record to the output file.  
        Copy records from the input file to the output file until another
            '2000A' record is found or end of file.  
    Else.
        Skip records from 'File 1' until another '2000A' record is found
            or end of file.  
    End of if.  
End of for each.
Close files.

Какой метод выбрать, может зависеть от количества записей, которые будут сохранены в «буферной таблице». Метод 1 использует две процедуры: Load 'buffer table' и Write 'buffer table'. В методе 2 используются четыре процедуры: Load 'buffer table', Write 'buffer table', Copy 'File 1' и Skip 'File 1' records (хотя Copy 'File 1' может иметь 'Skip flag' для предотвращения записи записей). Это не большая разница.

0 голосов
/ 22 января 2019
...