SQR 按位置而不是多个 IF LET ENDIF 替换
Posted
技术标签:
【中文标题】SQR 按位置而不是多个 IF LET ENDIF 替换【英文标题】:SQR replace by position rather than multiple IF LET ENDIF 【发布时间】:2021-01-10 03:10:42 【问题描述】:在将代码从一个数据库翻译到另一个数据库时,我必须为每个代码使用一个 IF LET ENDIF。 如果 $CODE = 'A11' 让 $CODE = 'AAA' 万一 如果 $CODE = 'B11' 让 $CODE = 'BBB' 万一 如果 $CODE = 'C11' 让 $CODE = 'CCC' 万一。 . .ad 恶心
SQR 中有没有办法进行位置替换? 替换('A11','B11','C11')IN('AAA','BBB','CCC')
谢谢, 大卫
【问题讨论】:
如果您可以在保存旧代码和新代码组合的数据库中创建一个表,然后您可以使用加载查找来提取信息。 SQR 中的代码行数会少得多。 那将是我的第一选择,我们甚至在源数据库中有一些“翻译”表,但出于某种原因,他们不想走那条路。蒙哥唯一的棋子。 . .谢谢,大卫 【参考方案1】:很遗憾,LET 语句的 REPLACE 和 TRANSLATE 子命令都只允许进行一次转换。
作为多个 if-then-else 的替代方案,您可以使用 Evaluate 语句:
Evaluate $Code
When = 'A11'
Let $Code = 'AAA'
When = 'B11'
Let $Code = 'BBB'
When-Other
End-Evaluate
这将使代码更容易审查并且不那么冗长。
【讨论】:
感谢您回复我。当我需要这个时,通常需要 20-150 次替换,所以至少我可以节省 30% 的线路。谢谢,大卫 我看到了 EVALUATE 在我的程序中的使用位置,但它们在每个 WHEN LET 上都有一个“BREAK”。我需要那个吗?使用 BREAK 是否可以节省处理时间?谢谢,大卫 BREAK 是可选的 - 我很确定。尝试并在没有的情况下进行测试,如果它不能满足您的需求,请添加 BREAK以上是关于SQR 按位置而不是多个 IF LET ENDIF 替换的主要内容,如果未能解决你的问题,请参考以下文章