REXX - длина выходных файлов в PDS - PullRequest
1 голос
/ 29 мая 2020

Не могли бы вы помочь мне с идеей: я пишу программу REXX в TSO, которая читает все файлы в PDS1 и, скажем, записывает построчно все файлы в PDS2. Моя проблема:

  1. Я прочитал файл 1 из 1500 строк; Я пишу файл1 из 1500 строк в PDS2
  2. Я читаю файл2 из 200 строк; Я пишу файл2 1500 строк в PDS2. Дополнительные строки взяты из файла1!
  3. Я прочитал файл3 из 2500 строк; Я пишу файл3 из 2500 строк в PDS2

Я не могу понять, в чем моя проблема. Код выглядит следующим образом:

ADDRESS TSO "ALLOC DA("newDS") FI(infile4) SHR"
ADDRESS TSO "ALLOC DA("newDSO") FI(outfile)"   
................
 S= RES.0                
 DO q = 7 TO S           
    RES.q = STRIP(RES.q) 
  ...........
    ADDRESS TSO "EXECIO * DISKR infile4 (STEM LINE. FINIS" 
    do until i > line.0   
      ADDRESS TSO "EXECIO * DISKR infile4 (STEM LINE. FINIS" 
    ......
      ADDRESS TSO "EXECIO * dISKW outfile (STEM lineo. FINIS"
    ...... 
      i = i + 1 
    end
    ADDRESS TSO "FREE FI(infile4)" 
    ADDRESS TSO "FREE FI(outfile)" 
END

Заранее спасибо

1 Ответ

1 голос
/ 06 июня 2020

Другой подход - это сделать что-то вроде этого псевдокода, который вообще не использует основные переменные. Это также имеет то преимущество, что не занимает память при обработке огромных файлов ...

do forever
    "execio 1 diskr indd"  /* Read 1 record */
    if (rc <> 0) or some other conditions -- look it up in the book )
    then do while queued()>0 /* Make sure the queue is empty b4 we leave */
            pull .
         end
         leave
    end
    parse pull data_record  /* Mixed-case data */

    new_data_record = somemod(old_data_record)

    queue new_data_record
    "execio 1 diskw outdd" /* write 1 record */
    if (rc<>0) then I have an I/O error writing (full disk?)    
end
"execio 0 diskw outdd (finis"   /* Close the output dataset */

Руководства по IBM / zOS V2R4 / ikja300_v2r4.pdf

...