File io REXX—PDS中输出文件的长度

File io REXX—PDS中输出文件的长度,file-io,rexx,File Io,Rexx,你能帮我想出一个主意吗 我正在用TSO编写一个REXX程序,它读取PDS1中的所有文件,并将所有文件逐行写入PDS2。 我的问题是: 我读了1500行的文件;我在PDS2中编写了一个1500行的文件1 我读了一个200行的文件;我在PDS2中编写了一个包含1500行的文件2。额外的行来自 文件1 我读了2500行的文件3;我在PDS2中写了一个2500行的文件3 我看不出我的问题在哪里。代码如下: ADDRESS TSO "ALLOC DA("newDS") FI(infile4) SHR" A

你能帮我想出一个主意吗 我正在用TSO编写一个REXX程序,它读取PDS1中的所有文件,并将所有文件逐行写入PDS2。 我的问题是:

  • 我读了1500行的文件;我在PDS2中编写了一个1500行的文件1
  • 我读了一个200行的文件;我在PDS2中编写了一个包含1500行的文件2。额外的行来自 文件1
  • 我读了2500行的文件3;我在PDS2中写了一个2500行的文件3
  • 我看不出我的问题在哪里。代码如下:

    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
    

    提前感谢

    另一种方法是执行类似于此伪代码的操作,它根本不使用stem变量。这还有一个优点,就是在处理大文件时不会占用内存

    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 */
    
    永远做
    “execio 1 diskr indd”/*读取1条记录*/
    if(rc 0)或其他一些条件——在书中查找)
    然后在排队时执行()>0/*确保队列是空的,我们离开*/
    拉。
    结束
    离开
    结束
    解析拉取数据\u记录/*混合案例数据*/
    新数据记录=somemod(旧数据记录)
    队列新数据记录
    “execio 1 diskw outdd”/*写入1条记录*/
    如果是(rc0),则我有一个I/O写入错误(完整磁盘?)
    结束
    “execio 0 diskw outdd(finis”/*关闭输出数据集*/
    

    IBM/zOS V2R4 Manuals/ikja300_V2R4.pdf

    您想做什么???。此外,我建议检查您列出的代码,可能是您没有复制到它,或者存在一些重大错误。您意识到
    EXECIO*dISKW outfile(STEM lineo.FINIS
    将整个STEM写入文件。我不明白您为什么要在循环中写入整个文件。代码将多次读取然后写入文件。嗨,Bruce,我试图简化解释。事实上,我需要逐行读取PDS中的所有文件,在某些情况下还需要进行修改并写入每个修改另一个PDS中的ied文件。因为我是REXX的新手,我认为地址TSO“EXECIO*dISKW outfile(STEM lineo.FINIS)”正在输出文件中写入当前行和地址TSO“FREE FI(outfile)”关闭当前文件。如果我错了,请帮助我找到用于在输出文件中逐行写入并最终关闭当前文件的命令。已解决!在每个输入文件之后,我使用DROP STEM。在每个输入文件之后,我仅使用EXECIO*dISKW outfile(STEM lineo.FINIS)一次。