For 循环中的 Foxpro 字符串变量组合

Foxpro String Variable combination in Forloop

如标题所示,我在 FOR 循环中的第一个代码中存在错误:命令包含无法识别的短语。我在想是不是string+variable这个方法错了

ALTER TABLE table1 ADD COLUMN prod_n c(10)
ALTER TABLE table1 ADD COLUMN prm1 n(19,2)  
ALTER TABLE table1 ADD COLUMN rbon1 n(19,2)
ALTER TABLE table1 ADD COLUMN total1 n(19,2)

共有prm2...直到total5,其中数字代表月份。

FOR i=1 TO 5
    REPLACE ALL prm+i WITH amount FOR LEFT(ALLTRIM(a),1)="P" AND 
    batch_mth = i
    REPLACE ALL rbon+i WITH amount FOR LEFT(ALLTRIM(a),1)="R" 
AND batch_mth = i
    REPLACE ALL total+i WITH sum((prm+i)+(rbon+i)) FOR batch_mth = i
NEXT
ENDFOR

感谢您的帮助。

您的意思是您有代表月份的名为 prm1、prm2、prm3 ... prm12 的字段,并且您想循环更新它们?如果是这样,您需要了解 "fieldName" 是 "name",因此您需要使用 "name expression" 将其用作变量。即:

prm+i

不会工作但是:

( 'pro'+ ltrim(str(m.i)) )

会。

例如,这里是您修改后的代码:

For i=1 To 5
    Replace All ('prm'+Ltrim(Str(m.i))) With amount For Left(Alltrim(a),1)="P" And batch_mth = m.i
    Replace All ('rbon'+Ltrim(Str(m.i))) With amount For Left(Alltrim(a),1)="R" And batch_mth = m.i
    * ?????????    REPLACE ALL ('total'+Ltrim(Str(m.i))) WITH sum((prm+i)+(rbon+i)) FOR batch_mth = i
Endfor

但是,我必须承认,您的代码对我来说没有意义。如果您解释了您正在尝试做的事情并提供一些简单的数据和您期望的结果(作为代码 - 您可以使用 foxite 上的常见问题解答 50 来创建数据代码),也许会更好。

您上面发布的代码有很多问题。 Cetin 已经提到了其中的一些,所以如果我重复其中的一些,我深表歉意。

问题 1 - 在您的 ALTER TABLE 命令中,我没有看到您在哪里创建字段 prm2、prm3、prm4、prm5、rbon2、rbon3 等
然而,当 FOR 循环表达式 i 从 1 增加到 5 时,您的 FOR 循环会尝试写入这些字段 - 如果您的代码的其他部分是正确的。

问题 2 - 您不能像使用 prm+irbon+ 那样将字符串连接到整数来创建字段名称1

Cetin 的代码建议会起作用(只要您定义了#2、#3 等字段)。然而,在 Foxpro 和 Visual Foxpro 中,您通常可以通过多种方式完成一项任务。

就我个人而言,为了便于阅读,我会这样处理您的 FOR 循环:

FOR i=1 TO 5
   * --- Keep in mind that unless fields #2, #3, #4, & #5 are defined ---
   * --- The following will Fail ---
   cFld1 = "prm" + STR(i,1)  && define the 1st field
   cFld2 = "rbon" + STR(i,1)  && define the 2nd field
   cFld3 = "total" + STR(i,1)  && define the 3rd field

   REPLACE ALL &cFld1 WITH amount ;
      FOR LEFT(ALLTRIM(a),1)="P" AND batch_mth = i
   REPLACE ALL &cFld2 WITH amount ;
      FOR LEFT(ALLTRIM(a),1)="R" AND batch_mth = i
   REPLACE ALL &cFld3 WITH sum((prm+i)+(rbon+i)) ;
      FOR batch_mth = i 
NEXT

注意 - 如果您能学习使用 VFP 的调试工具,这样您就可以在 VFP 开发模式下逐行检查您的代码执行,这可能会很好。您还可以使用它来检查变量值。
断点 很好,但您必须已经打开 TRACE WINDOW 才能使中断工作。
SET STEP ON 是我通常使用的调试命令,这样程序执行将停止并自动打开 TRACE WINDOW 以查看代码执行 and/or 变量值。