这可能很有用,它应该检测何时找到新成员。
IF SUBSTR(mydata,1,7) = "MEMBER:" THEN DO
your code here to extract member data
END
ELSE DO
your code to handle input that doesn't include a member
END
注意我没有办法运行和检查这个,所以把它当作一个指南。mydata 也是输入数据的当前行
根据评论,我发现了一些 Rexx。这是一个显示用于处理输入数据的 EXECIO 和复合变量(请注意,这是//INPUT01 DD inputdataset,DISP=SHR
为输入数据批量运行而设计的)。
这是代码:-
/* REXX - OPCDLYMN */0000100
/*--------------------------------------------------------------------*/0001000
/* OPC/ESA Log Monitor */0002000
/*--------------------------------------------------------------------*/0003000
OPCDLYMN: 0003100
rec_count = 0 0003200
Do Forever 0004000
"EXECIO 1 DISKR INPUT01 (STEM In.)" 0004100
If rc ¬= 0 Then Leave 0004200
rec_count = rec_count + 1 0004300
If Substr(in.1,17,8) = "EQQE007I" Then Do 0004400
eqqe007i_typ = Substr(in.1,26,4) 0004420
eqqe007i_dly = Strip(Substr(in.1,83,9)) 0004430
eqqe007i_day = Substr(in.1,2,2) 0004440
eqqe007i_mon = Substr(in.1,5,2) 0004450
eqqe007i_dat = eqqe007i_day"/"eqqe007i_mon 0004460
eqqe007i_tim = Substr(in.1,8,8) 0004470
eqqe007i_hr = Substr(eqqe007i_tim,1,2) 0004480
eqqe007i_min = Substr(eqqe007i_tim,4,2) 0004490
eqqe007i_sec = Substr(eqqe007i_tim,7,2) 0004500
If eqqe007i_typ = "ALL " Then do 0004520
Say Right(eqqe007i_dly,9)" delays on "eqqe007i_dat||, 0004540
" at "eqqe007i_tim 0004550
End 0004560
End 0004600
End 0005000
Say "End of processing "rec_count" records processed" 0006000
在。是 STEM IN.1是一个复合变量,基于词干。
请注意,您可以使用"EXECIO * DISKR INPUT01 (STEM in.)"
,它将读取所有数据(我认为 In.0 会将计数和 In.1、In.2... 保存到 nn (我认为 nn 是 in.0 保存的值))。但是,这可能(可能)导致内存问题。因此,为什么我通常在单独的行中阅读。
注意=(即¬ If rc ¬= 0 Then Leave
)之前的字符并不总是可用(我认为主要是英国键盘)。相反,您可以使用 /=(不等于)。
所以这个程序逐行读入所有数据,直到没有更多数据为止(如果有数据结束等错误,则 rc 由 EXECIO 设置为非零)。
rec_count 递增,因此记录读取的记录数。
如果第 17 到 24 个字符是 EQQE007I,则进一步处理这些行,否则开始 DO 循环的另一个迭代。
然后进行的处理是相似的,因为提取了输入行的各个部分。如果 ALL(后面有空格)存在于字符 26-29,则信息通过 Say 输出(如果我没记错的话,转到 SYSOUT 或 SYSPRINT)。
如果您对此进行了调整,那么您可能需要复制当前行以在下一次迭代中进行比较。
最后请注意,每行右侧的 7 个数字不是代码的一部分。