IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

验证每个选择查询中程序内部是否存在UR


IBM大型机论坛 -> 清单& REXX
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
普里扬卡基尔

新的用户


加入:2019年6月12日
帖子:7
地点:印度

发布发表于:星期三六月12,2019 3:37下午
引用回复

大家好,
我的要求是检查WITH UR是否存在于所有选择查询中或是否不在程序中。如果任何查询中都缺少WITH UR,则显示带有错误声明的行号。我尝试使用循环。首先,我正在搜索EXEC,然后如果找到了EXEC,那么我正在搜索SELECT。如果在EXEC内找到SELECT,则应搜索END-EXEC。然后,它搜索EXEC和END-EXEC中是否存在WITH UR。我在以下代码中遇到问题。请帮助我找出问题或任何替代解决方案。
码:

/ * REXX * /
"ALLOC F(INPUT) DA(‘INPUT PS FILE’) SHR "   
"EXECIO * DISKR 输入 (FINIS STEM 线。"
"FREE F(INPUT)" 
执行STMT = 0 
执行STMT1 = 0 
碳纳米管= 0   
CNT1 = 0 
CNT2 = 0 
尾= 0 
HDR = 0 0
D = 1

DO I = D TO 线。0

   IF 字库("EXEC",LINE.I) > 0 然后 HDR = 1
   IF HDR = 1 然后
   DO
      A = I
      HDR = 0
      说A
   END
   DO B = A TO 线。0
      IF (WORDPOS("SELECT",LINE.B)>0) 然后 HDR = 1
      如果HDR = 1 然后
      DO
         CNT = B
         HDR = 0
         SAY "SELECT FOUND"
      结束
   END
   DO CNT2 = CNT TO 线。0
      IF (WORDPOS("END-EXEC",LINE.CNT2) > 0) 然后 HDR=1
      如果HDR = 1 然后
      DO
         CNT3 = CNT2
         HDR = 0
         B = 线。0
         CNT2 = 线。0
         SAY "END-EXEC FOUND"
      结束
   END
   DO CNT4 = CNT TO 线。0
      IF (WORDPOS("WITH UR",LINE.CNT4) > 0) 然后 HDR=1
      如果HDR = 1 然后
         IF CNT4 < CNT3 然后
         DO
            HDR = 0
            CNT5 = CNT4
            说"WITH UR FOUND"
         END
      如果CNT4> CNT3 然后
      DO
         CNT4 = 线。0
         CNT5 = CNT4
         C=CNT3 + 1
         NEW.D = 线。C
         SAY "WITH UR NOT FOUND"
      结束
   END

结束
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:星期三六月12,2019 5:44下午
引用回复

我已为您的代码编码-下次请自己进行编码。通过这样做,我对压痕进行了标准化,因此现在可以更轻松地了解所用的功能。

你有什么问题?应该提供错误消息,样品输入,该样品的实际输出。

您的踪迹显示了什么?发表(仅相关部分)

在HDR初始化中,您有一个额外的0。
您的代码中没有注释,以使包括您自己在内的人们知道每个部分应该做什么。
回到顶部
查看用户资料 发送私信
普里扬卡基尔

新的用户


加入:2019年6月12日
帖子:7
地点:印度

发布发表于:星期三六月12,2019 6:24下午
引用回复

输入:-我在输入文件(“输入PS文件”

1)EXEC
2)从表中选择
3)与你
4)结束执行
5)EXEC
6)从表2中选择
7)结束执行

现在我希望我的输出是
预期输出:-在第7行之前未找到UR

上面代码的输出为


码:
1                           
选择 FOUND                 
结束执行 FOUND           
带UR NOT FOUND             
2                           
选择 FOUND                 
结束执行 FOUND           
带UR NOT FOUND             
3                           
结束执行 FOUND           
带UR NOT FOUND             
4                           
结束执行 FOUND           
带UR NOT FOUND             
5                           
结束执行 FOUND           
带UR NOT FOUND           
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:三月12,2019 6:39下午
引用回复

主要问题是您要对每一行执行每个DO子句。它们应在找到EXEC关键字行的DO子句中执行。
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:星期三六月12,2019 7:30下午
引用回复

这个示例(对于OORexx(我建议您使用它))可以满足您的要求。尚未对其进行清理以摆脱一些虚假的编码或使用更好的逻辑,但是它可以工作。
码:

/ * REXX * /
/ *初始化* /
输入='"300records.txt"'
提取='"with_ur.txt"'
exit_msg ="withur.rex 结束ed OK"
exec_line_no = 0
with_ur_line_no = 0

/ *将源读入词干"line.". */
地址hostemu"EXECIO * DISKR "INPUT" (FINIS STEM 线。"
如果rc<> 0
然后做

   exit_msg = "EXECIO失败,显示rc ="rc
   Signal 门
   
结束

我=1 To 线。0

   If Wordpos("EXEC",line.I) > 0
   然后调用process_exec_group
   
结束

门:
   Drop 线。
   Say exit_msg
出口
/ * ================================================ ================== * /
process_exec_group:
/* 说where we are */
   exec_line_no = i
   Say "EXEC found at line "exec_line_no
   
/ *查找与此EXEC关联的END-EXEC * /
   Do i = (i + 1) To 线。0
      If (Wordpos("END-EXEC", 线。i) > 0)
      然后做
         end_exec_line_no = i
         Leave
      结束
   End
/ *查找此EXEC是否执行SELECT * /
   x = exec_line_no到end_exec_line_no
      If (Wordpos("SELECT",line.x) > 0)
      然后做
         select_line_no = x
         Say "选择找到在线"select_line_no
      结束
   End
/ *如果找到SELECT,则查看此块是否包含WITH UR * /   
   If 选择_line_no > 0
   Then Do

      x = 选择_line_no到end_exec_line_no
         If (Wordpos("WITH UR",line.x) > 0)
         然后做
            with_ur_line_no = x
            说"在线找到UR"x
         结束
      End
      如果with_ur_line_no = 0
      Then 说"在第EXEC行找不到EXEC的WITH UR"exec_line_no

   End
/ *重置过程中使用的所有行位置* /
   exec_line_no     = 0
   select_line_no   = 0
   with_ur_line_no  = 0
   end_exec_line_no = 0

返回
/ * ================================================ ================== * /
::requires "hostemu" library

回到顶部
查看用户资料 发送私信
威利·詹森(Willy Jensen)

活跃用户


已加入:2015年9月1日
帖子:416
地点:丹麦

发布发表于:星期三六月12,2019 9:01下午
引用回复

我可以建议一个更紧凑的替代方法:
码:
 用Selln urln解析值0 0                             
 do ln=1 to 线。0                                           
   select                                                   
     when word(line.ln,1)='SELECT',然后卖出= ln             
     when 空间(line.ln)='WITH UR'然后urln = ln             
     when 空间(line.ln)='END-EXEC' then do                 
       if urln>0然后说出“ WUR UR in line”,     
         'of' 线。selln 'in line' selln                     
       else 说line.selln“在线”出售“没有UR”
       用Selln urln解析值0 0                       
     end                                                     
     otherwise nop                                           
   end                                                       
 end                                                         

该代码生成以下行:
码:
在第2行的SELECT 从表的第3行找到WITH UR     
第6行的TABLE2中的SELECT没有WITH UR
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:939
所在地:马里兰

发布发表于:星期三六月12,2019 9:20下午
引用回复

有关先前代码示例的一些注释。

1)代码本身过于复杂,而没有考虑特定代码的重要情况

2)在具有开放名称空间的过程中和过程外使用不正确的公共变量(尤其是变量“ i”)(例如,没有“ procedure”语句)

3)不考虑以单行/多行编码SQL语句的机会:
码:
执行 SQL
选择
从表
带UR
结束执行
码:
用表执行SQL选择 UR结束执行

4)不考虑免费使用空间的机会:
码:
用表执行SQL选择 UR结束执行
码:
用表执行SQL选择             UR 结束执行

5)不考虑错误的关键字顺序:
码:
执行 SQL
选择
从表
带UR
结束执行
码:
执行 SQL
选择
执行 SQL
执行 SQL
带UR
结束执行


我想提出一种不同风格的分析器逻辑及其编码
码:
/ * REXX * /                                                           
                                                                     
/ *将源读入词干"Code." */                               
 err_code = 0                                                         
 "EXECIO * DISKR "INPUT" (FINIS STEM 码。"                           
 If rc <> 0                                                           
 Then Do                                                             
    exit_msg ="EXECIO失败,显示rc ="rc                           
    err_code = 12                                                     
    信号门                                                       
 End                                                                 
                                                                     
 / *在扫描代码之前重置指示器* /                     
 exec_line_no = 0                                                     
 select_line_no = 0                                                   
 with_ur_line_no = 0                                                 
                                                                     
 / *确保在单独的行和单个行中都检测到任何关键字* /
 Do iLine = 1 To 码。0                                               
    NewLine = Space( 码。iLine, 1 )/ *重新格式化为单个空格* /
                                                                     
    如果Wordpos( "EXEC", NewLine ) > 0 然后做                         
       exec_line_no = iLine                                           
                                                                     
       If exec_line_no > 0 Then                                       
          说exec_line_no":在END-EXEC之前找到重复的EXEC"   
       Else Do                                                       
          说exec_line_no": 执行 found"                             
       End                                                           
    结束                                                               
                                                                     
    如果exec_line_no> 0 然后做                                       
       If Wordpos( "SELECT", NewLine ) > 0 然后做                   
         select_line_no = iLine                                     
          说"SELECT found within 执行"                             
       End                                                           
                                                                     
       If 选择_line_no > 0 ,                                       
        & Wordpos( "WITH UR", NewLine ) > 0 然后做                     
          with_ur_line_no  = iLine                                     
          说"WITH UR found within 选择"                             
       End                                                             
                                                                       
       If Wordpos( "END-EXEC", NewLine ) > 0 然后做                   
          说"END-EXEC found after 执行"                               
                                                                       
         如果select_line_no = 0,则                                   
             Say "SELECT not found within 执行"                         
         否则,如果with_ur_line_no = 0,则                             
             Say "WITH UR not found within 选择"                     
                                                                       
         / *在新的EXEC组之前重置指示器* /                 
          exec_line_no = 0                                             
          选择_line_no = 0                                           
          with_ur_line_no = 0                                           
       End                                                             
    结束                                                                 
                                                                       
 End iLine                                                             
                                                                       
 door:                                                                 
    Drop 码。                                                         
    说exit_msg                                                       
                                                                       
 Exit err_code                                                         
/ * ================================================= =================== * /
回到顶部
查看用户资料 发送私信
普里扬卡基尔

新的用户


加入:2019年6月12日
帖子:7
地点:印度

发布发表于:2019年6月13日,星期四1:42 pm
引用回复

谢谢Nic,sergeyken和Willy回复了此帖。我是REXX的新手,所有答案都对您有很大帮助。

我尝试了Nic的代码,它工作正常。尚未尝试其他两个代码。
尼克我有疑问。我们不会在代码的任何地方增加“ I”的值。找到一个Exec之后,它会自动增加,然后转到文件中的下一个Exec行吗?
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:2019年6月13日星期四2:00 pm
引用回复

码:
我=1 To 线。0

在主线上增加i
码:
我=(i + 1) To 线。0

在寻找END-EXEC的子程序中使i递增。请注意,在此行应阅读
码:
我=i To 线。0

捕获将整个代码块都编码在一行上的情况(不是一种好的编码习惯)。
回到顶部
查看用户资料 发送私信
威利·詹森(Willy Jensen)

活跃用户


已加入:2015年9月1日
帖子:416
地点:丹麦

发布发表于:星期四六月13,2019 2:38下午
引用回复

将在一个或多个行中处理EXEC语句的另一个版本:
码:
 line.1='EXEC'                                       
 line.2 ='从表格中选择'                           
 line.3='WITH UR'                                     
 line.4='END-EXEC'                                   
 line.5 ='使用UR 结束执行从表1中执行选择'   
 line.6='EXEC'                                       
 line.7 ='从表2中选择'                         
 line.8='END-EXEC'                                   
 line.9 ='从表1 结束执行中选择EXEC'           
 line.0=9                                             
                                                     
 用exln wuln解析值0 0                       
 do ln=1 to 线。0                                   
   l=translate(space(line.ln))                       
   if word(l,1)='EXEC' then exln=ln                   
   if pos('WITH UR',l)>0 then wuln=ln                 
   if right(l,8)='END-EXEC' then do                   
     if wuln>0然后说“ WUR UR in line”,
       'of 执行 in line' exln                         
     else 说'EXEC in line'exln'with 带UR'   
     用exln wuln解析值0 0                   
   end                                               
 end                                                 

将产生此列表:
码:
在第1行的EXEC第3行中找到WITH UR
在第5行的EXEC第5行中找到WITH UR
执行 in line 6 has no 带UR             
执行 in line 9 has no 带UR           
回到顶部
查看用户资料 发送私信
普里扬卡基尔

新的用户


加入:2019年6月12日
帖子:7
地点:印度

发布发表于:2019年6月13日,星期四7:40 pm
引用回复

我正在尝试从PDS读取数据,在该数据中我有成员,并且我想检查EXEC和END-EXEC内部是否缺少WITH UR。


代码已作为PDS成员输入,无法正常工作。它不是PDS成员的阅读行

码:

/ * REXX * /
exec_line_no = 0
with_ur_line_no = 0
"ALLOC F(INFILE) DSN('INPUT.PDS(MEMBER)') SHR REU"
 "EXECIO * DISKR 输入 (FINIS STEM 线。"
 "FREE F(INPUT)"
我=1 To 线。0

    如果Wordpos("EXEC",line.I) > 0
   然后调用process_exec_group
     
结束
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:939
所在地:马里兰

发布发表于:2019年6月13日,星期四8:00 pm
引用回复

普里扬卡基尔写道:
代码已作为PDS成员输入,无法正常工作。

这是否意味着计算机正在关闭?起火并被摧毁?用英语说:“我不在工作”?

我们中的许多人都能够使用REXX读/写PDS成员很多年了……

你到底是什么问题???

附言
我可以看到您的问题所在,但除非您能够正确提出问题,否则它不会回答。
回到顶部
查看用户资料 发送私信
威利·詹森(Willy Jensen)

活跃用户


已加入:2015年9月1日
帖子:416
地点:丹麦

发布发表于:2019年6月13日,星期四8:23 pm
引用回复

当然是行不通的
“ ALLOC F(INFILE)DSN('INPUT.PDS(MEMBER)')SHR REU”
specifies 资料 as DDname,
"执行*磁盘INPUT (FINIS STEM 线。"
specifies 输入 as DDname.
回到顶部
查看用户资料 发送私信
普里扬卡基尔

新的用户


加入:2019年6月12日
帖子:7
地点:印度

发布发表于:星期五六月14,2019 3:23上午
引用回复

如果END-EXEC后接点,则代码无法正常工作。
它抛出严重的关节错误。
例如,假设我在下面的代码中想要查找选择查询是否具有WITH UR。因此它将首先搜索第一个EXEC SQL,并搜索EXEC SQL AND 结束- 执行块中是否存在select。如果选择找到,它将搜索WITH UR。但是由于END-EXEC之后出现点,我收到了严重的关节错误。
码:

1)识别部门。
2)PROGRAM ID. TEST.
3)ENVIRONMENT SECTION.
4)DATA DIVISION.
5)工作存储部分。
6)EXEC SQL
7)SQLCA
8)END-EXEC.
9)PROCEDURE DIVISION.
10)EXEC SQL
11)SELECT
12)FROM TABLE
13)END-EXEC.


回到顶部
查看用户资料 发送私信
威利·詹森(Willy Jensen)

活跃用户


已加入:2015年9月1日
帖子:416
地点:丹麦

发布发表于:星期五六月14,2019 1:25下午
引用回复

哪个代码?
回到顶部
查看用户资料 发送私信
普里扬卡基尔

新的用户


加入:2019年6月12日
帖子:7
地点:印度

发布发表于:星期五六月14,2019 1:39下午
引用回复

大家好,
现在代码可以正常工作了,我删除了“。”在END-EXEC语句之后,所以现在可以正常工作了。
我想将输出输出到PS文件中,请告诉我是否可以在PS文件中写入以下字符串输出。
码:

"在第EXEC行找不到EXEC的WITH UR"200
 "在第EXEC行找不到EXEC的WITH UR"350


下面是完整的代码
码:

/ * REXX ACT * /                                                 
/ *初始化* /                                         
出口_MSG ="WITHUR.REX 结束ED OK"                               
执行_LINE_NO = 0                                               
WITH_UR_LINE_NO = 0                                           
/ *阅读源代码"LINE.". */                       
"ALLOC F(INPUT) DSN('INPUT.PDS (MEMBER)') SHR"
/*"EXECIO * DISKR 输入 (FINIS STEM 线。" */                 
"EXECIO * DISKR 输入 (STEM 线。 FINIS"                       
"FREE F(INPUT)"                                               
中频<> 0                                                     
然后做                                                       
   EXIT_MSG = "执行失败,RC ="RC                     
   SIGNAL 门                                                 
        M                                                     
结束                                                           
DO I = 1 TO 线。0                                             
   IF 字库("EXEC SQL",LINE.I) > 0                                   
   THEN                                                                 
   拨打电话PROCESS_EXEC_GROUP                                             
结束                                                                     
门:                                                                   
   DROP 线。                                                           
   SAY 出口_MSG                                                         
出口                                                                   
/ * ================================================ ================== * /
PROCESS_EXEC_GROUP:                                                     
/* 说WHERE WE ARE */                                                 
   EXEC_LINE_NO = I                                                     
/* 说"EXEC FOUND AT LINE "EXEC_LINE_NO */                             
 / *查找与此执行相关的最终执行* /                     
    DO I = (I + 1) TO 线。0                                           
       TEMP = TRANSLATE(LINE.I," ",".")                                 
       IF (WORDPOS("END-EXEC", TEMP) > 0)                               
       THEN DO                                                         
         END_EXEC_LINE_NO = I                                       
         LEAVE                                                     
      结束                                                           
   END                                                             
/ *如果此执行执行选择,则查找* /                           
   DO X = 执行_LINE_NO TO 结束_EXEC_LINE_NO                         
      IF (WORDPOS("SELECT",LINE.X) > 0)                             
      然后做                                                       
         SELECT_LINE_NO = X                                         
/*       SAY "选择在线查找"SELECT_LINE_NO */               
      结束                                                           
   END                                                             
/ *如果找到选择,然后查看该块是否包含UR * /   
   IF 选择_LINE_NO > 0                                           
   THEN DO                                                         
     DO X = 选择_LINE_NO TO 结束_EXEC_LINE_NO                     
         IF (WORDPOS("WITH UR",LINE.X) > 0)                         
         THEN DO                                                   
             WITH_UR_LINE_NO = X                                       
             IND=Y                                                     
  /*         SAY "在网上找到我们"WITH_UR_LINE_NO */           
          结束                                                         
       END                                                             
       如果WITH_UR_LINE_NO = 0                                         
       THEN 说"没有在线执行的UR"EXEC_LINE_NO     
    结束                                                               
/ *重置程序中使用的所有行位置* /                       
   EXEC_LINE_NO     = 0                                               
   SELECT_LINE_NO   = 0                                               
   WITH_UR_LINE_NO  = 0                                               
   END_EXEC_LINE_NO = 0                                               
返回                                                                 
/ * ================================================ ================== * /
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:星期五六月14,2019 2:14下午
引用回复

将您的消息写到主干(message.msgno-“要写的消息”)。
在将消息分配给message.msgno之前,必须在程序启动时将msgno初始化为0并将其递增。退出程序之前,如果是msgno>0分配您的输出数据集,并使用EXECIO编写词干。

保留message.0中的消息行数,并在您的EXECIO中将其用作要写入的行数。
回到顶部
查看用户资料 发送私信
普里扬卡基尔

新的用户


加入:2019年6月12日
帖子:7
地点:印度

发布发表于:星期五六月14,2019 4:31下午
引用回复

谢谢Nic,我能够在PS文件中写没有WITH UR的行。
但是,当我再次运行代码时,文件中包含旧数据,因此没有刷新。我也使用了删除文件命令,但是它抛出错误。请在下面找到代码。
码:

/ * REXX ACT * /                                                   
/ *初始化* /                                             
地址TSO                                                       
出口_MSG ="WITHUR.REX 结束ED OK"                                 
执行_LINE_NO = 0                                                 
WITH_UR_LINE_NO = 0                                               
QRYCNT = 0                                                       
/ *阅读源代码"LINE.". */                         
"ALLOC F(INPUT) DSN('INPUT.PDS(MEMBER)') SHR"   
/*"EXECIO * DISKR 输入 (FINIS STEM 线。" */                     
"EXECIO * DISKR 输入 (STEM 线。 FINIS"                         
"FREE F(INPUT)"                                                   
中频<> 0                                                       
然后做                                                           
   EXIT_MSG = "执行失败,RC ="RC                       
   SIGNAL 门                                                   
        M                                                         
结束                                                               
DO I = 1 TO 线。0                                                     
   IF 字库("EXEC SQL",LINE.I) > 0                                   
   THEN                                                               
   拨打电话PROCESS_EXEC_GROUP                                             
结束                                                                   
门:                                                                 
   DROP 线。                                                         
   SAY 出口_MSG                                                       
出口                                                                   
/ * ================================================ ================== * /
PROCESS_EXEC_GROUP:                                                   
/* 说WHERE WE ARE */                                                 
   EXEC_LINE_NO = I                                                   
/* 说"EXEC FOUND AT LINE "EXEC_LINE_NO */                           
 / *查找与此执行相关的最终执行* /                     
    DO I = (I + 1) TO 线。0                                           
       TEMP = TRANSLATE(LINE.I," ",".")                               
       IF (WORDPOS("END-EXEC", TEMP) > 0)                             
      然后做                                                       
         END_EXEC_LINE_NO = I                                       
         LEAVE                                                       
      结束                                                           
   END                                                               
/ *如果此执行执行选择,则查找* /                           
   DO X = 执行_LINE_NO TO 结束_EXEC_LINE_NO                           
      IF (WORDPOS("SELECT",LINE.X) > 0)                             
      然后做                                                       
         SELECT_LINE_NO = X                                         
/*       SAY "选择在线查找"SELECT_LINE_NO */               
      结束                                                           
   END                                                               
/ *如果找到选择,然后查看该块是否包含UR * /   
   IF 选择_LINE_NO > 0                                             
   THEN DO                                                           
     DO X = 选择_LINE_NO TO 结束_EXEC_LINE_NO                     
         IF (WORDPOS("WITH UR",LINE.X) > 0)                         
          然后做                                               
             WITH_UR_LINE_NO = X                               
             IND=Y                                             
  /*         SAY "在网上找到我们"WITH_UR_LINE_NO */     
          结束                                                   
       END                                                     
       如果WITH_UR_LINE_NO = 0                                   
       THEN                                                     
       DO                                                       
        QRYCNT = QRYCNT + 1                                     
        QRYREC.QRYCNT="没有在线执行的UR",   
              执行_LINE_NO                                     
        "ALLOC F(OUTDD) DA('HLQ.TEST) SHR"           
        "执行* DISKW 外出(STEM QRYREC. FINIS"             
        "FREE F(OUTDD)"                                         
       END                                                     
    结束                                                         
/ *重置程序中使用的所有行位置* /               
   EXEC_LINE_NO     = 0                                               
   SELECT_LINE_NO   = 0                                               
   WITH_UR_LINE_NO  = 0                                               
   END_EXEC_LINE_NO = 0                                               
   STRING=" "                                                         
返回                                                                 
/ * ================================================ ================== * /

回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:星期五六月14,2019 5:18下午
引用回复

您需要仔细阅读我的文章,并将输出语句放在循环中的主程序之后,但在door:标签之前。不要写*记录,而要写计数器中的数字(应该是output_stem.0)。当确定WITH UR是否存在时,请使用IF / 然后 / ELSE构造为“ with UR”写一个主干,为不带“ 带UR”写另一个主干。一次运行可同时涵盖两个选项。您可以将两个词干写入相同或不同的数据集。如果相同,则在写入第一个词干时不要使用FINIS,否则第二个写入将覆盖第一个词干。
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:939
所在地:马里兰

发布发表:星期六六月15,2019 3:22上午
引用回复

如果以这种方式设计语法解析器,那么任何编译器都将无法正常工作... 12.gif
回到顶部
查看用户资料 发送私信
普里诺
警告:1

高级会员


已加入:2009年2月7日
职位:1241
地点:立陶宛维尔纽斯

发布发表:2019年6月15日星期六7:06 pm
引用回复

我确定在存在或不存在“ 带UR”的情况下,DB2预编译器会为调用DB2接口生成不同的参数。扫描清单,而不是自由格式的源文件!

也许使用不起眼的IBM实用程序SRCHFOR ...

嘘,另一个线程无处可去。

和REXX不会抛出任何东西!
回到顶部
查看用户资料 发送私信
唐·雷西

活跃的成员


已加入:2010年7月6日
帖子:696
地点:加拿大安大略省惠特比

发布发表于:2019年6月16日,星期日4:21
引用回复

我可能对这个线程很晚,但是有什么原因导致TS无法查看SYSIBM.SYSSTMT中的ISOLATION列?比解析源代码IMHO更容易。
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表于:2019年6月16日,星期日2:14 pm
引用回复

好吧。我在SRCHFOR文档中看不到它如何实现:在一行上找到一个关键字,然后在另一行上找到另一个关键字,确保第二个关键字在第三个关键字之前,最后写入两个不同的报告数据集。

至于使用SYSSTMT表,我也不知道。可能需要再研究一个小时。
回到顶部
查看用户资料 发送私信
普里诺
警告:1

高级会员


已加入:2009年2月7日
职位:1241
地点:立陶宛维尔纽斯

发布发表于:2019年6月16日,星期日5:37 pm
引用回复

ISRSUPC可以选择查找行和上下文,但是仅搜索EXEC,END-EXEC和“ 带UR”就应该已经大大减少了要处理的数据量。

无论如何,Db2目录表应该以更简单的方式包含所有信息!
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> 清单& REXX

 


类似主题
话题 论坛 回覆
没有新帖 帮助编写SQL查询 DB2 1
没有新帖 在合并查询中需要帮助 DB2 4
没有新帖 检查内部总计数... JCL和VSAM 5
该主题已锁定:您无法编辑帖子或回复。 将字段名称传递给COBOL程序 COBOL程式设计 10
该主题已锁定:您无法编辑帖子或回复。 示例CICS Web服务程序 CICS 1
搜索我们的论坛:


回到顶部