查看上一个主题 :: 查看下一个主题
|
作者 |
信息 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
你好
我需要根据存在的变量数量使用REXX检查多个条件
例如:A = 123,B = NH,C ='',D ='2008'
我需要在哪里检索记录
A = 123,B = NH&D ='2008'必须省略C,因为该值为空白
像IF(SUBSTR(RC.I,1,3)= A& SUBSTR(RC.I,4,2)=B & SUBSTR(RC.I,8,4)=D)
并且这可能会循环,因此需要根据具有这些值的变量来改变IF条件。我们将不知道什么时候哪个字段为空白,也可能有多个字段为空白。
请让我知道您的建议。 |
|
回到顶部 |
|
 |
恩里科·索里切蒂
高级主持人

已加入:2007年3月14日 帖子:10715 所在地:意大利
|
|
|
|
非常谦虚的建议
尝试以更容易理解的方式表达您的要求,
这个问题可能对您来说很清楚,但是您暴露的方式并不能使所有人都清楚... |
|
回到顶部 |
|
 |
恩里科·索里切蒂
高级主持人

已加入:2007年3月14日 帖子:10715 所在地:意大利
|
|
|
|
试图从提供的信息中推断出一些东西
记录 是您要分析的东西
var1,var2,var3 是你需要检查的变量
这是一个代码片段
码: |
记录 ="var1var2var3var4"
pos1 = 1; len1 = 4; var1 ="var1"
pos2 = 5; len2 = 4; var2 =""
pos3 = 9; len3 = 4; var3 =""
NOT_MATCHED = 0
已配对 = 1
跟踪"I"
do 1
标志= NOT_MATCHED
if var1 <> "" & ,
substr(recd,pos1,len1) <> var1 then 离开
if var2 <> "" & ,
substr(recd,pos2,len2) <> var2 then 离开
if var3 <> "" & ,
substr(recd,pos3,len3) <> var3 then 离开
flag = 已配对
结束
如果flag = 已配对,那么,
say "MATCHED"
否则,
say "NOT 已配对"
出口
|
|
|
回到顶部 |
|
 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
例如:说我有一些变数
A=123
B = NE
C =''
D=2008
我的输入文件有
记录1:23,NE,D,2008
记录2:123,NE,T,2008
记录3:111,HN,U,2007
我需要获取所有值为A = 123,B = NE和D = 2008的记录,我们没有条件C的值为C =“'(空白)
条件会像
IF((SUBSTR(RECORD.I,1,3)= A&SUBSTR(RECORD.I,5,2)= B&SUBSTR(RECORD.I,10,4)= D))这将找回我
记录1:23,NE,D,2008
记录2:123,NE,T,2008
同样明智的是,我的IF条件需要根据具有值的字段进行更改。如果A是空话,那么我应该离开该字段,并用字段B,C和D构成条件。
这是我的问题。 |
|
回到顶部 |
|
 |
恩里科·索里切蒂
高级主持人

已加入:2007年3月14日 帖子:10715 所在地:意大利
|
|
|
|
那么给出的代码段就可以做到这一点, 经过测试
这个新的代码段测试不存在的变量或空变量
码: |
记录 ="var1var2var3var4"
pos1 = 1; len1 = 4; var1 ="var1"
pos2 = 5; len2 = 4; var2 =""
删除var2
pos3 = 9; len3 = 4; var3 =""
NOT_MATCHED = 0
已配对 = 1
跟踪"I"
do 1
标志= NOT_MATCHED
if symbol('var1') = "VAR" & ,
strip(var1) <> "" & ,
substr(recd,pos1,len1) <> var1 then 离开
if symbol('var2') = "VAR" & ,
strip(var2) <> "" & ,
substr(recd,pos2,len2) <> var2 then 离开
if symbol('var3') = "VAR" & ,
strip(var3) <> "" & ,
substr(recd,pos3,len3) <> var3 then 离开
flag = 已配对
结束
如果flag = 已配对,那么,
say "MATCHED"
否则,
say "NOT 已配对"
出口
|
|
|
回到顶部 |
|
 |
恩里科·索里切蒂
高级主持人

已加入:2007年3月14日 帖子:10715 所在地:意大利
|
|
|
|
该代码段更加复杂
它从列表中动态构建变量名
码: |
记录 ="var1var2var3var4"
pos1 = 1; len1 = 4; var1 ="var1"
pos2 = 5; len2 = 4; var2 =""
删除var2
pos3 = 9; len3 = 4; var3 ="var3"
NOT_MATCHED = 0
已配对 = 1
越南_l ="var1 var2 var3 var4"
vpos_l ="1 5 9 13"
vlen_l ="4 4 4 4"
跟踪"I"
flag = 已配对
do v = 1 to words(vnam_l)
vnam = word(vnam_l,v)
vpos = word(vpos_l,v)
vlen = word(vlen_l,v)
vval = value(vnam)
if symbol(vnam) <> "VAR" then ,
iterate
if 跳闸(vval) = "" then ,
iterate
if substr(recd,vpos,vlen) <> 值 then do
flag = NOT_MATCHED
leave
end
结束
如果flag = 已配对,那么,
say "MATCHED"
否则,
say "NOT 已配对"
出口
|
|
|
回到顶部 |
|
 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
感谢你的建议 ...
但这即使有一个变量也可以向我显示记录,但我不希望这样
我需要检查所有具有值的变量是否存在于该记录中,然后按照我之前在示例中指定的方式仅获取该记录。
您对此有何建议? |
|
回到顶部 |
|
 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
非常感谢enrico-sorichetti
这就是我为此所做的努力,请告诉我您为什么使用DROP VAR2 |
|
回到顶部 |
|
 |
恩里科·索里切蒂
高级主持人

已加入:2007年3月14日 帖子:10715 所在地:意大利
|
|
|
|
引用: |
我需要根据存在的变量数量使用REXX检查多个条件
例如:A = 123,B = NH,C ='',D ='2008'
我需要在哪里检索记录
A = 123,B = NH&D ='2008'必须省略C,因为该值为空白
|
我的样品就是那样
如果未定义任何源变量,或者为空白或为空,
跳过比较
书面,做得更好,经过测试,按照引用的要求工作并发布
只是学会以一种不会引起误解的方式表达您的要求,请
添加了多个记录,并根据原始要求进行了测试
码: |
记录.0 = 5
Recd.1 ="var1var2var3var4"
记录.2 ="var1varxvar3var4"
记录.3 ="var1var2varxvar4"
Recd.4 ="var1var2var3varx"
Recd.5 ="var1var2var3varx"
var1 ="var1"
var3 ="var3"
NOT_MATCHED = 0
已配对 = 1
越南_l ="var1 var2 var3 var4"
vpos_l ="1 5 9 13"
vlen_l ="4 4 4 4"
do r = 1 to 记录.0
recd = 记录.r
trace "O"
flag = 已配对
do v = 1 to words(vnam_l)
vnam = word(vnam_l,v)
vpos = word(vpos_l,v)
vlen = word(vlen_l,v)
vval = value(vnam)
if symbol(vnam) <> "VAR" then ,
iterate
if 跳闸(vval) = "" then ,
iterate
if substr(recd,vpos,vlen) <> 值 then do
flag = NOT_MATCHED
leave
end
end
如果flag = 已配对,那么,
say "MATCHED " r 记录.r
else ,
say "NOT 已配对" r 记录.r
结束
出口
|
|
|
回到顶部 |
|
 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
非常感谢您为enrico-sorichetti提供的帮助 |
|
回到顶部 |
|
 |
恩里科·索里切蒂
高级主持人

已加入:2007年3月14日 帖子:10715 所在地:意大利
|
|
|
|
drop语句用于测试变量是否不存在...
最后一个片段中有一个小故障
码: |
...之前
vlen = word(vlen_l,v)
vval = value(vnam)
if symbol(vnam) <> "VAR" then ,
iterate
if 跳闸(vval) = "" then ,
iterate
|
码: |
...之后
vlen = word(vlen_l,v)
if symbol(vnam) <> "VAR" then ,
iterate
vval = value(vnam)
if 跳闸(vval) = "" then ,
iterate
|
在检查了变量值的存在之后检索变量值是比较明智的 |
|
回到顶部 |
|
 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
收到了。谢谢 |
|
回到顶部 |
|
 |
迪克·谢勒
主持人荣誉

已加入:2006年11月23日 帖子:19245 位置:矩阵内部
|
|
|
|
嗨,恩里科,
很久以前有人告诉我 虫子 是“小故障之子”。 。 。 。 |
|
回到顶部 |
|
 |
恩里科·索里切蒂
高级主持人

已加入:2007年3月14日 帖子:10715 所在地:意大利
|
|
|
|
嗨,迪克,
希望你能原谅我的小故障
回答TS时,该代码段经过了测试
(...可以通过消息时间戳看到)
我保证以后会更加小心  |
|
回到顶部 |
|
 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
嗨,恩里科,
这个记录执行得很快,但记录很少,但是我的输入中有记录和记录,这样做很慢,因此有任何方法可以使其变得更好和更快。
对此的建议将有很大帮助 |
|
回到顶部 |
|
 |
dbzTHEdinosauer
全球主持人

已加入:2006年10月20日 帖子:6967 位置:瓷宝座
|
|
|
|
谈论rexx时,记录的亿万个被认为是必需的信息。 rexx不是高端I / O实用程序。您可以编译您的rexx。
你可以建立排序控制语句
要么
编写一个cobol / pl1 / assembler模块来处理此数据。 |
|
回到顶部 |
|
 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
此rexx由面板和rexx代码组成,其中用户输入一些值,我需要验证每个字段并在验证后引发消息,以获取用户输入的值并搜索用户输入的值的组合是否存在于以下文件中:如果组合存在,将有十亿条记录;如果未弹出,则会将其写入文件;如果未弹出,则提示为“未找到组合”,并且所有这些都将在线完成。REXX验证将成为后端,因此无法将其放入文件中。搜索用户在包含数十亿条记录的文件中输入的字段值的组合会花费我很多时间。 |
|
回到顶部 |
|
 |
c
高级会员
已加入:2006年7月28日 职位:1702 所在地:澳大利亚
|
|
|
|
你好
我不敢相信有人会提出这样的设计,这些请求多久运行一次?有多少用户可以要求?现在满足这些请求之一需要多少时间?
当然,可以验证用户输入的值并将其保存到文件中,然后可以批量使用该文件。
我将尝试将所有请求捕获到一个文件中,并每天运行一个批处理作业。
格里 |
|
回到顶部 |
|
 |
外籍人士
全球主持人

已加入:2007年3月14日 帖子:8794 地点:威尔士威尔士
|
|
|
|
格里,别说了,提出明智的建议
您认为这是一个帮助论坛之类的东西  |
|
回到顶部 |
|
 |
迪克·谢勒
主持人荣誉

已加入:2006年11月23日 帖子:19245 位置:矩阵内部
|
|
|
|
你好,
如果这一概念得到了证实,那么最好按照DBZ的建议进行操作,并以更适合的语言重新编码该过程。
对于处理大量数据,REXX可能是最糟糕的选择。 。 。 |
|
回到顶部 |
|
 |
佩德罗
全球主持人

已加入:2006年9月1日 帖子:2214 地点:硅谷
|
|
|
|
引用: |
搜索用户输入的值的组合是否存在于文件中(如果该组合存在)将具有十亿条记录 |
如果定期搜索,我认为数据存储格式错误。确实没有一种很好的方法来搜索以顺序格式存储的数十亿条记录。它应该在数据库中,在查找(或不查找)记录之前,它可能需要读取几个索引块。 |
|
回到顶部 |
|
 |
Craq Giegerich
高级会员
加入时间:2007年5月19日 帖子:1512 地点:美国弗吉尼亚
|
|
|
|
数十亿条记录,数百万条记录我认为其中一些记录估算有些差。 |
|
回到顶部 |
|
 |
佩德罗
全球主持人

已加入:2006年9月1日 帖子:2214 地点:硅谷
|
|
|
|
引用: |
我的输入内容中有Billons od记录,它在执行此操作时非常慢,有什么方法可以使其变得更好和更快。 |
很难相信,在没有先意识到性能问题的情况下获得了数十亿条记录。当您说“十亿”时,我只是假设您的意思是“大量记录”。
加快速度的方法是不使用顺序文件。对键控记录使用VSAM。我认为您可以从rexx获得处理VSAM的工具。 (或者如我之前所说,使用真实的数据库)。 |
|
回到顶部 |
|
 |
维迪亚
新的用户
已加入:2008年5月2日 帖子:77 地点:钦奈
|
|
|
|
是的,我一开始就听您说过话,这被认为是很少有记载,现在已经达到数十亿。这需要在线处理以获取用户输入并验证并向其抛出错误消息。我猜这不能更改为程序。搜索部分会浪费时间,有什么办法可以将此搜索部分合并到像cobol这样的语言中,并与rexx结合,因为这需要在线完成。 |
|
回到顶部 |
|
 |
c
高级会员
已加入:2006年7月28日 职位:1702 所在地:澳大利亚
|
|
|
|
你好
我想成为输入数据并等待结果的用户。
我将不得不寻找娱乐自己的方法。
格里 |
|
回到顶部 |
|
 |
|