在 Foxpro 中替换为 for

replace with for in Foxpro

我正在对 FoxPro 中制作的程序进行逆向工程。

我对FoxPro一窍不通,幸好程序简单,所有的流程我都能看懂

我有这个,在源代码中

Select 1
SET RELATION TO GROUP_T+POL INTO BASE2
REPLACE MARK_T WITH BASE2->STATUS FOR GROUP_T+POL=BASE2->GROUP_T+POL
REPLACE LAPSE2 WITH BASE2->LAPSE FOR GROUP_T+POL=BASE2->GROUP_T+POL
REPLACE STATUS2 WITH BASE2->STATUS FOR GROUP_T+POL=BASE2->GROUP_T+POL
REPLACE DATPAHAS2 WITH BASE2->DATPAHAS FOR GROUP_T+POL=BASE2->GROUP_T+POL
CLOSE DATABASES

我需要知道变量LAPSE2 稍后会用到它。

但我不知道计算结果

这是什么意思?

REPLACE LAPSE2 WITH BASE2->LAPSE FOR GROUP_T+POL=BASE2->GROUP_T+POL

这是稍后在条件中使用前出现的唯一行

在您显示的片段中,当前 table 中每个 LAPSE2 的值被替换为 [=] 中第一个匹配记录的 LAPSE 字段的值13=],基于那个table.

中当前设置的索引

FOR 子句将此限制为在 BASE2 中具有匹配记录的记录;跳过不匹配的记录(保持不变)。如果没有此过滤器,当没有匹配记录时,LAPSE2 的新值将是一个空值 ('', .f., 0, ...)。

注意:没有任何 FORWHILEREPLACE 只会影响单个记录,因为缺少范围子句意味着 NEXT 1(另一种方式看起来 FOR 有点暗示 ALLWHILE 有点暗示 REST).

代码片段开头的 SET RELATION 语句导致 Fox 在 BASE2 table 中执行查找,结果是计算表达式 GROUP_T+POL 每当记录指针改变。换句话说:每当主 table 中的记录指针移动时,子 table(s) 中的记录指针将移动到第一个匹配记录(如果有)或 EOF(如果没有)比赛。

因此 SET RELATIONREPLACE ... FOR <key match> 的组合类似于

replace LAPSE2 with Base2.LAPSE for seek(GROUP_T + POL, [Base2])

注意:此声明仅用于说明发生的情况;它不应该在实际代码中使用,因为它充满了问题和错误。