现在开始动手做你这个。
分开做是什么意思?为什么要分开?
三个问题需要分开做。不要做在一起。
分开做是什么意思?为什么要分开?
授人以渔,不授人以鱼。
CLEAR ALL SET SAFETY OFF && 关闭文件覆盖保护 CLEAR * 创建输出数据表 * 由于这是新建文件,所以后面不需再初始化 CREATE TABLE "Output1" FREE (卷号 C(5), 最大尾页 I) CREATE TABLE "Output2" FREE (记录号 I) CREATE TABLE "Output3" FREE (记录号 I) CLOSE TABLES ALL SELECT 0 USE "试验用" ALIAS "testDBF" INDEX ON 卷号+页号 TO "testDBF" USE "Output1" EXCLUSIVE IN 0 USE "Output2" EXCLUSIVE IN 0 USE "Output3" EXCLUSIVE IN 0 * 为回避后续处理不涉及表文件名的要求,在这里切换当前工作区到指定表空间 * 后续所有处理动作均对当前工作区进行 SELECT "testDBF" Process("Output1", "Output2", "Output3") CLOSE TABLES ALL CLEAR ALL RETURN *------------------------------ * 数据的处理过程 *------------------------------ PROCEDURE Process(tcOutput1, tcOutput2, tcOutput3) LOCAL lcAlias && 当前工作区 LOCAL lcCaseID && 当前处理的卷号 LOCAL llFirstRecord && 每卷的第一条记录标志 LOCAL lnLastPage && 尾页号 LOCAL lnPages && 总页数 * 记忆当前工作区 lcAlias = ALIAS() SELECT "&lcAlias" lcCaseID = "" llFirstRecord = .F. lnPages = 0 * 扫描所有尾页号非空的记录 GOTO TOP DO WHILE !EOF() IF lcCaseID != 卷号 lcCaseID = 卷号 llFirstRecord = .T. ENDIF DO WHILE lcCaseID == 卷号 IF llFirstRecord * 检查要求第3点:每卷的第一条记录首页号是否为1 IF ALLTRIM(首页号) != "1" * 把检查结果输出到对应的输出表中 SELECT "&tcOutput3" APPEND BLANK REPLACE 记录号 WITH RECNO(lcAlias) SELECT "&lcAlias" ENDIF lnLastPage = VAL(尾页号) ELSE IF VAL(页号) != lnLastPage + 1 * 把要求第2点的记录输出到对应的输出表中 SELECT "&tcOutput2" APPEND BLANK REPLACE 记录号 WITH RECNO(lcAlias) SELECT "&lcAlias" ELSE lnLastPage = VAL(尾页号) ENDIF ENDIF SKIP IN "&lcAlias" llFirstRecord = .F. ENDDO * 把要求第1点的记录输出到对应的输出表中 SELECT "&tcOutput1" APPEND BLANK REPLACE 卷号 WITH lcCaseID, 最大尾页 WITH lnLastPage lnPages = lnPages + 最大尾页 SELECT "&lcAlias" ENDDO * 输出总页数 SELECT "&tcOutput1" APPEND BLANK REPLACE 卷号 WITH "总计", 最大尾页 WITH lnPages BROWSE * 返回进来时所处的工作区 SELECT "&lcAlias" ENDPROC *------------------------------ * 显示记录 *------------------------------ PROCEDURE Show_Record(tcAlias) LOCAL lcAlias lcAlias = ALIAS() SELECT "&tcAlias" ?? 卷号,首页号,页号,尾页号 ? SELECT "&lcAlias" ENDPROC