注册 登录
编程论坛 VFP论坛

如何将几个字段的值写入数组,排序后再替换为字段值

chychychy 发布于 2023-07-05 23:59, 662 次点击
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

有wldj(物理等级)- hxdj - zzdj - lsdj - dldj - swdj - tydj等字段,想把这几个字段连接(CCCDCCA)并排序后(ACCCCCD)写入dj字段,
问题以前求助过,sdta版帮解决过,但只是使用知其然不知其所以然。同事问能否把几个字段值放入数组,将数组内容排序后再写入。试着学习了一下,还没进入循环,刚开始就卡住了,查看vfp帮助,没能解决,还是太菜了,请帮助分析解决。
尝试1
SCATTER FIELDS wldj,hxdj,zzdj,lsdj,dldj,swdj TO px
?px&&&错误,只显示一个A,不是想象中的CCCDCCA呢?
尝试2
DIMENSION  x(7)
* 为数组元素赋值
x(1) = WLDJ
x(2) = HXDJ
x(3) = ZZDJ
x(4) = LSDJ
x(5) = DLDJ
x(6) = SWDJ
x(7) = TYDJ
LIST MEMORY LIKE x && 显示数组元素
=ASORT(x)
?x&&&错误,只显示一个A,不是想象中的CCCDCCA呢?

之前版主代码能完美处理,但只是拿来主义,我和同事都没能彻底消化,尤其等级排序部分
* VFP9 代码
t1=SECONDS()&&计时函数
SCAN
    REPLACE 七科 WITH djpx(ALLTRIM(wldj - hxdj - zzdj - lsdj - dldj - swdj - tydj))
    REPLACE 六科 WITH djpx(ALLTRIM(wldj - hxdj - zzdj - lsdj - dldj - swdj))
ENDSCAN
MESSAGEBOX("共运行:"+TRANSFORM(SECONDS()-t1)+"秒") &&计算用时多少
*
* 等级排序
*
FUNCTION djpx(cStr)
LOCAL px[LEN(cStr)]
FOR i = 1 TO LEN(cStr)
    px[i] = SUBSTR(cStr, i, 1)
ENDFOR
=ASORT(px)
cStr1 = ""
FOR i = 1 TO ALEN(px,1)
    cStr1 = cStr1 + px[i]
ENDFOR
RETURN cStr1

[此贴子已经被作者于2023-7-6 00:18编辑过]

2 回复
#2
sdta2023-07-06 00:53
程序代码:
CLOSE DATABASES
USE tj
REPLACE 七科 WITH SPACE(0) ALL
SCAN
    SCATTER FIELDS wldj,hxdj,zzdj,lsdj,dldj,swdj,tydj TO px
    = ASORT(px)
    REPLACE 七科 WITH ALLTRIM(px[1] - px[2] - px[3] - px[4] - px[5] - px[6] - px[7])
ENDSCAN
BROWSE
#3
chychychy2023-07-06 08:11
回复 2楼 sdta
谢谢!恍然大悟,替换也得将排序后的连接起来。
1