标题:求多个字段各自比较且循环
只看楼主
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
结帖率:100%
已结贴  问题点数:90 回复次数:6 
求多个字段各自比较且循环
各位老师好!
    感谢你们的帮助。
    发过去个表。b1,b2。我的想法是:
表b1中Z1到z72字段,每个字段的上一行的值,与这个字段下一行的值比较,
相等的记为0。不相等的记为1。

例:b1
   字段z1的最后一行是72,上一行是76;上一行不等于下一行,在b2的z1倒数第二行记为1。
   字段z1的最后第二行是76,上一行是73;上一行不等于下一行,在b2的z1倒数第三行记为1。
   ......
   字段z1的最后第29行是55,上一行是55;上一行与下一行相等,在b2的z1倒数第三十行记为0。
   ......

   字段z2同上;
   字段z3同上;
   ......

   字段z72同上。
 
   
   我知道应该将b1复制成2个临时表,将其中一个表的指针减一行,然后进行比较。

但是怎么循环,就不会了;更不会把指针移到z2、z3、z4...进行再循环。

请各位老师在百忙中帮助写出程序。再次表示感谢!

b1.zip (403.04 KB)

b2.zip (21.4 KB)
搜索更多相关主题的帖子: 多个 一行 比较 循环 字段 
2020-12-07 15:05
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:40 
Close Tables All
Create Cursor tmp1 (qihao N(7,0),h1 N(1,0),h2 N(1,0),h3 N(1,0))
For i=1 To 72
    czdm='z'+Alltrim(Str(i))
    Alter Table tmp1 Add &czdm. N(3,0)
Endfor
Use b1 In 0
Append From b1 For Recno()<Reccount('b1')
Select * From tmp1 Into Cursor  tmp2 Where .F. Readwrite
Select tmp2
Append From b1 For Recno()>1
Select  0
Use b2
Zap
Append From b1 For Recno()<Reccount('b1')Fields qihao,h1,h2,h3
Set Relation To Recno() Into tmp1
Select tmp1
Set Relation To Recno() Into tmp2
Select b2
Scan
    For i=1 To 72
        czdm='z'+Alltrim(Str(i))
        Replace &czdm. With  Iif(tmp1.&czdm.-tmp2.&czdm.=0,0,1)

    Endfor
Endscan


dBase有人接盘了。
2020-12-07 17:06
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 2楼 xuminxz
非常感谢。晚上试一下。
2020-12-07 17:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
没校对

程序代码:
USE b2
ZAP

**    * 运行一次修改b2的z1--z72字段宽度与b1看齐
**    FOR i=1 TO 72
**        ALTER TABLE b2 ALTER COLUMN ("z"+TRANSFORM(i)) N(3,0)
**    ENDFOR

SELECT * FROM b2 INTO CURSOR tmp READWRITE 
SELECT b2
APPEND FROM b1 FIELDS qihao,h1,h2,h3
SELECT tmp
APPEND FROM b1
SET RELATION TO RECNO() INTO "b2"
GO BOTTOM 
SCATTER TO arr1
SKIP -1
DO WHILE !BOF("tmp")
    SCATTER TO arr2
    FOR i=5 TO 76
        arr2[i] = IIF(arr1[i]==arr2[i], 0, 1)
    ENDFOR
    SCATTER TO arr1
    SELECT b2
    GATHER FROM arr2
    SELECT tmp
    SKIP -1
ENDDO
SELECT * FROM b2
2020-12-07 21:13
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
代码简化一下,效率不知有无提高
程序代码:
USE b2
ZAP

**    * 运行一次修改b2的z1--z72字段宽度与b1看齐
**    FOR i=1 TO 72
**        ALTER TABLE b2 ALTER COLUMN ("z"+TRANSFORM(i)) N(3,0)
**    ENDFOR

SELECT * FROM b2 INTO CURSOR tmp READWRITE 
SELECT tmp
APPEND FROM b1
GO TOP 
SCATTER TO arr1
SKIP
SCAN REST 
    SCATTER TO arr2
    FOR i=5 TO 76
        arr1[i] = IIF(arr1[i]==arr2[i], 0, 1)
    ENDFOR
    SELECT b2
    APPEND FROM ARRAY arr1
    ACOPY(arr2, arr1)
ENDSCAN 
SELECT * FROM b2
2020-12-07 21:43
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:30 
程序代码:
CLOSE DATABASES
USE b1
COPY TO ARRAY aa FIELDS LIKE z*
USE
USE b2
FOR lnj = ALEN(aa, 1) - 1 TO 1 STEP -1
    FOR lnk = 1 TO ALEN(aa, 2)
        REPLACE ("Z" + TRANSFORM(lnk)) WITH IIF(aa[lnj + 1, lnk] = aa[lnj, lnk], 0, 1) RECORD lnj
    ENDFOR
ENDFOR
BROWSE 

坚守VFP最后的阵地
2020-12-07 23:42
denstiny
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-12-8
得分:0 
以下是引用吹水佬在2020-12-7 21:43:39的发言:

代码简化一下,效率不知有无提高
USE b2
ZAP

**    * 运行一次修改b2的z1--z72字段宽度与b1看齐
**    FOR i=1 TO 72
**        ALTER TABLE b2 ALTER COLUMN ("z"+TRANSFORM(i)) N(3,0)
**    ENDFOR

SELECT * FROM b2 INTO CURSOR tmp READWRITE
SELECT tmp
APPEND FROM b1
GO TOP
SCATTER TO arr1
SKIP
SCAN REST
    SCATTER TO arr2
    FOR i=5 TO 76
        arr1[i] = IIF(arr1[i]==arr2[i], 0, 1)
    ENDFOR
    SELECT b2
    APPEND FROM ARRAY arr1
    ACOPY(arr2, arr1)
ENDSCAN
SELECT * FROM b2

哇,大佬没想到你还在这个论坛呀
2020-12-08 00:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504161-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.591542 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved