注册 登录
编程论坛 VFP论坛

请各位老师指点一下这个程序

yd1954 发布于 5 天前 16:53, 165 次点击
只有本站会员才能查看附件,请 登录

我请豆包帮我写个程序:
连续统计
h1列、2002001行到2002015行中,0出现的的次数,并将统计结果放到h1_0列,2002015行的单元格。
h1列、2002002行到2002016行中,0出现的的次数,并将统计结果放到h1_0列,2002016行的单元格。
h1列、2002003行到2002017行中,0出现的的次数,并将统计结果放到h1_0列,2002017行的单元格。
h1列、2002004行到2002018行中,0出现的的次数,并将统计结果放到h1_0列,2002018行的单元格。
........

h1列、2024348行到2025010行中,0出现的的次数,并将统计结果放到h1_0列,2025010行的单元格。

如果统计结果为0,则在相应的单元格中记为0。

得到以下程序

USE YourTableName

FOR startRow = 2002001 TO 2024348
    endRow = startRow + 14
    COUNT FOR h1 = 0 AND RECNO() >= startRow AND RECNO() <= endRow TO countZero

    GO endRow
    REPLACE h1_0 WITH countZero
ENDFOR

USE

运行后,在GO ENDROE处显示“记录超出范围”。程序中“endrow=srartroe+14”已经限定了范围,请老师们指点帮助。谢谢。
5 回复
#2
schtg5 天前 19:57
回复 楼主 yd1954
因为数据表3d001.dbf中的qihao数值有一些乱。从数值上看,好像是年份 + 3位数的序号,但其间有2026269、2029270……等数值。
最好使用序号来判断,可能会更好一些。
程序代码:
select recno() as xh,* from 3d001 into table _ls
select _ls
for i = 1 to 8153
    count for h1 = 0 and xh >= m.i and xh <= 14 + m.i to countzero
    replace h1_0 with countzero for xh = 14 + m.i
endfor



程序代码:
USE YourTableName
FOR startRow = 1 TO 8153
    endRow = startRow + 14
    COUNT FOR h1 = 0 AND RECNO() >= startRow AND RECNO() <= endRow TO countZero
    GO endRow
    REPLACE h1_0 WITH countZero
ENDFOR
USE


说明:8153 = 总记录数 - 14,上面的计算方法是常规方法,略显慢了一些哈。



[此贴子已经被作者于2025-4-14 20:50编辑过]

#3
yd19545 天前 21:33
非常感谢schtg老师的帮助。qihao确实是年份+序号。这其中每年的序号总量并不相同,也有我录入是错误。我改正了几个,还要再细致检查。再次感谢!
#4
csyx5 天前 21:42
程序代码:
Close Databases
Clear

Use (LocFile('3d001.dbf')) Exclusive Alias src
Select src
Index on qihao tag qihao
Set Order To

ns = 2002001
goto bottom
ne = qihao - 14

For ii = ns to ne
    jj = ii + 14
    Update src set h1_0 = ( ;
        select Count(*) from src where h1 = 0 and qihao between ii and jj) ;
        where qihao == jj
    Wait window ii nowait
EndFor

Set Order To qihao
Browse
Delete Tag qihao
*-- 显示可能有误的数据
Browse for !Between(qihao, ns, ne+14)



[此贴子已经被作者于2025-4-14 23:41编辑过]

#5
schtg4 天前 06:46
回复 4楼 csyx
高!妙!
#6
yd19544 天前 20:27
回复 4楼 csyx
非常感谢老师的指点。
1