注册 登录
编程论坛 VFP论坛

求教:如何修改代码[用表文件jftj中的字段zifu替换代码中的zhifu

王咸美 发布于 2023-05-08 06:49, 342 次点击
现有表文件jftj.dbf,如何修改代码[用表文件jftj中的字段zifu替换代码中的zhifu='aaddcdadbbabbbc']来计算语文老师的积分(字母1-5)、数学老师的积分(字母6-10)、英语老师的积分(字母11-15)。积分规则:A 10分 B 9分 C 8分 D 7分
请高手赐教,不胜感谢!!!
[本贴为旧贴,只为学习用,不喜权当路过]
只有本站会员才能查看附件,请 登录


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

CLEAR
fz='a10b09c08d07'
ls='语文数学外语'

zhifu='aaddcdadbbabbbc'

FOR i=1 TO 15 STEP 5
    vz = SUBSTR(zhifu,i,5)
    jg = 0
    FOR j=1 TO 12 STEP 3
        zz  = SUBSTR(fz,j,1)
        zzz = VAL(SUBSTR(fz,j+1,2))
        jg = jg +(LEN(vz)-len(CHRTRAN(vz,zz,'')))*zzz
    ENDFOR
    ?SUBSTR(ls,((i-1)/5)*4+1,4)+":"+STR(jg,4)  
ENDFOR   

[此贴子已经被作者于2023-5-8 07:08编辑过]

17 回复
#2
王咸美2023-05-08 07:10
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#3
吹水佬2023-05-08 08:03
应该可以参考你自己的贴:https://bbs.bccn.net/thread-511941-1-1.html
#4
laowan0012023-05-08 08:12
程序代码:
返回一个字符表达式在另一个字符表达式中出现的次数。
OCCURS(cSearchExpression, cExpressionSearched)
参数
cSearchExpression
指定字符表达式,OCCURS( ) 在 cExpressionSearched 中查找该表达式。
cExpressionSearched
指定一字符表达式,OCCURS( ) 在其中查找 cSearchExpression 字符表达式。

xx = 'AABBCDBDAACACDDAA'
yw = 10*OCCURS('A',SUBSTR(xx,1,5)) + 9*OCCURS('B',SUBSTR(xx,1,5)) + 8*OCCURS('C',SUBSTR(xx,1,5)) + 7*OCCURS('D',SUBSTR(xx,1,5))
messagebox(yw)
依此类推

#5
laowan0012023-05-08 08:19
程序代码:
SELECT jftj
REPLACE all yw WITH 10*OCCURS('A',SUBSTR(zifu,1,5)) + 9*OCCURS('B',SUBSTR(zifu,1,5)) + 8*OCCURS('C',SUBSTR(zifu,1,5)) + 7*OCCURS('D',SUBSTR(zifu,1,5))
REPLACE all sx WITH 10*OCCURS('A',SUBSTR(zifu,6,5)) + 9*OCCURS('B',SUBSTR(zifu,6,5)) + 8*OCCURS('C',SUBSTR(zifu,6,5)) + 7*OCCURS('D',SUBSTR(zifu,6,5))
REPLACE all yy WITH 10*OCCURS('A',SUBSTR(zifu,11,5)) + 9*OCCURS('B',SUBSTR(zifu,11,5)) + 8*OCCURS('C',SUBSTR(zifu,11,5)) + 7*OCCURS('D',SUBSTR(zifu,11,5))
GO TOP
BROWSE

或者
SELECT jftj
REPLACE all yw WITH 10*OCCURS('A',SUBSTR(zifu,1,5)) + 9*OCCURS('B',SUBSTR(zifu,1,5)) + 8*OCCURS('C',SUBSTR(zifu,1,5)) + 7*OCCURS('D',SUBSTR(zifu,1,5)),sx WITH 10*OCCURS('A',SUBSTR(zifu,6,5)) + 9*OCCURS('B',SUBSTR(zifu,6,5)) + 8*OCCURS('C',SUBSTR(zifu,6,5)) + 7*OCCURS('D',SUBSTR(zifu,6,5)),yy WITH 10*OCCURS('A',SUBSTR(zifu,11,5)) + 9*OCCURS('B',SUBSTR(zifu,11,5)) + 8*OCCURS('C',SUBSTR(zifu,11,5)) + 7*OCCURS('D',SUBSTR(zifu,11,5))
GO TOP
BROWSE


[此贴子已经被作者于2023-5-8 08:26编辑过]

#6
吹水佬2023-05-08 08:24
与之前的贴(https://bbs.bccn.net/thread-511941-1-1.html)统计原理差不多,一个是“合”,另一个是“分”。
#7
王咸美2023-05-08 08:36
谢谢各位高手的热心指点!!!
#8
吹水佬2023-05-08 09:20
只有本站会员才能查看附件,请 登录

程序代码:
SET COMPATIBLE OFF
ALINES(abcd,"10,9,8,7",",")
DIMENSION tj[3]
SELECT banji,zifu,tj[1] yw,tj[2] sx,tj[3] yy FROM jftj WHERE fun()

FUNCTION fun()
    tj = 0
    FOR i=1 TO ALINES(arr,TRANSFORM(zifu,"@R #####,#####,#####"),",")
        FOR j=1 TO ALINES(ysy,TRANSFORM(arr[i],"@R #,#,#,#,#"),",")
            tj[i] = tj[i] + VAL(abcd[ASC(ysy[j])-ASC("A")+1])
        ENDFOR
    ENDFOR
    RETURN .t.
ENDFUNC
#9
ybq10142023-05-08 14:51
以供参考
程序代码:
CLOSE DATABASES
USE jftj IN 0
SELECT jftj
kmStr=""
FOR ln=3 TO FCOUNT()
    kmStr=kmStr+','+FIELD(ln)
ENDFOR
kmStr=RIGHT(ALLTRIM(kmStr),LEN(alltrim(kmStr))-1)
=ALINES(akm,kmStr,1+4,',')
lcStr="A,10,B,9,C,8,D,7"
=ALINES(bz,lcStr,1+4,',')
DIMENSION bz[4,2]
SCAN
   FOR i=1 TO 15 STEP 5
       bbStr=SUBSTR(ALLTRIM(zifu),i,5)
       jf=0
       FOR j=1 TO LEN(bbStr)
         ch=SUBSTR(bbStr,j,1)
         Rownum=ASCAN(bz,ch,1,-1,1,8)
         jf=jf+VAL(bz[Rownum,2])
       ENDFOR
       REPLACE (akm[CEILING(i/5)]) WITH jf
  ENDFOR
ENDSCAN
BROWSE

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


[此贴子已经被作者于2023-5-8 15:19编辑过]

#10
sdta2023-05-08 15:06
回复 9楼 ybq1014
以不变应万变,别具一格,学习了。
kmstr 最好由表中字段生成最好,个人看法。
#11
ybq10142023-05-08 15:09
回复 10楼 sdta
还是跟您学的,班门弄斧了,马上按您的建议编辑修改
#12
ybq10142023-05-08 15:21
回复 10楼 sdta
已修改
#13
王咸美2023-05-09 04:27
@ybq1014 你好!能否将修改后的代码分享出来供学习?谢谢!
#14
sdta2023-05-09 08:07
以下是引用王咸美在2023-5-9 04:27:47的发言:

@ybq1014 你好!能否将修改后的代码分享出来供学习?谢谢!

看9楼代码
#15
王咸美2023-05-09 14:01
把具体字符串换成表中字段,如何操作?请高手赐教!谢谢!!!

CLEAR
fz='a10b09c08d07'
ls='语文数学外语'

zhifu='aaddcdadbbabbbc'把这一句换成jftj.dbf中的zifu字段内容如何操作?

FOR i=1 TO 15 STEP 5
    vz = SUBSTR(zhifu,i,5)
    jg = 0
    FOR j=1 TO 12 STEP 3
        zz  = SUBSTR(fz,j,1)
        zzz = VAL(SUBSTR(fz,j+1,2))
        jg = jg +(LEN(vz)-len(CHRTRAN(vz,zz,'')))*zzz这一句有问题
    ENDFOR

    ?SUBSTR(ls,((i-1)/5)*4+1,4)+":"+STR(jg,4)  如何把具体积分分别写入表文件jftj.dbf的yw、sx、yy字段中
ENDFOR   

[此贴子已经被作者于2023-5-9 14:18编辑过]

#16
吹水佬2023-05-09 14:41
CLEAR
fz='a10b09c08d07'
ls='语文数学外语'

** zhifu='aaddcdadbbabbbc' 把这一句换成jftj.dbf中的zifu字段内容如何操作?
zhifu=jftj.zifu && jftj工作区的当前记录zifu

FOR i=1 TO 15 STEP 5
    vz = SUBSTR(zhifu,i,5)
    jg = 0
    FOR j=1 TO 12 STEP 3
        zz  = SUBSTR(fz,j,1)  && 既然已采用CHRTRAN()就无必要a,b,c,d都去算,除非都含有abcd。另用CHRTRAN()时就可以去掉已经处理过的abcd,不用每次都从头起计算,直到vz为空。
        zzz = VAL(SUBSTR(fz,j+1,2))
        jg = jg +(LEN(vz)-len(CHRTRAN(vz,zz,'')))*zzz 这一句有问题
    ENDFOR
    ?SUBSTR(ls,((i-1)/5)*4+1,4)+":"+STR(jg,4)  如何把具体积分分别写入表文件jftj.dbf的yw、sx、yy字段中
    * i=1 TO 15 STEP 5 在这算法有点复杂,是否可以改为:
    * i=0 TO 2
    * vz = SUBSTR(zhifu,i*5+1,5)
    * SUBSTRC(ls,i*2+1,2)
ENDFOR   

#17
吹水佬2023-05-09 14:46
以下是引用王咸美在2023-5-9 14:01:28的发言:
    ?SUBSTR(ls,((i-1)/5)*4+1,4)+":"+STR(jg,4)  如何把具体积分分别写入表文件jftj.dbf的yw、sx、yy字段中

根据i确定yw、sx、yy字段名
#18
pvm20002023-05-11 06:11
比较简单的问题吧
1