0

输入:

MEMBER:XPTO1
STEPALT2
MEMBER:XPTO2
MEMBER:XPTO3
STEPALT3STEPALT VERIFY
VERIFY2
MEMBER:XPTO4
VERIFY1 VERIFY02A01STEP

输出:

 MEMBER:XPTO1   STEPS:STEPALT2
 MEMBER:XPTO3   STEPS:STEPALT3 STEPALT  VERIFY  VERIFY2
 MEMBER:XPTO4   STEPS:VERIFY1  VERIFY02 A01STEP

或者

输出2:

 MEMBER:XPTO1   STEPALT2
 MEMBER:XPTO3   STEPALT3 STEPALT    VERIFY  VERIFY2
 MEMBER:XPTO4   VERIFY1  VERIFY02 A01STEP

知道的事实:每个成员名称或步骤名称最多可以有 8 个字符 我如何使用 REXX 做到这一点?

4

1 回答 1

2

这可能很有用,它应该检测何时找到新成员。

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 个数字不是代码的一部分。

于 2016-04-15T04:16:29.203 回答