注册 登录
编程论坛 VFP论坛

把具体字符串换成表中字段,如何操作?

王咸美 发布于 2023-05-09 15:35, 303 次点击
只有本站会员才能查看附件,请 登录

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


把表文件jftj中的字段zifu替换代码中的zhifu='aaddcdadbbabbbc']来计算语文老师的积分(字母1-5)、数学老师的积分(字母6-10)、英语老师的积分(字母11-15),
并分别写入jftj.dbf的yw、sx、yy字段中。
积分规则:A 10分 B 9分 C 8分 D 7分

具体代码如下:(只修改)
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   
14 回复
#2
ybq10142023-05-09 18:29
回复 楼主 王咸美
今天很忙,刚看到消息,晚点回复。
#3
王咸美2023-05-10 17:44
下列代码不知道问题出在哪里? 无法计算出yw 、sx 、yy 的积分。

CLEAR
fz='a10b09c08d07'
ls='语文数学外语'
SCAN
USE jftj IN 0 ALIAS jftj
zhifu=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)
        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)  
    DO CASE
       CASE SUBSTR(ls,((i-1)/5)*4+1,4)=“语文”
           Repl yw with str(jg,4)
       CASE SUBSTR(ls,((i-1)/5)*4+1,4)=“数学”
           Repl sx with str(jg,4)
       CASE SUBSTR(ls,((i-1)/5)*4+1,4)=“外语”
           Repl yy with str(jg,4)
     ENDCASE
ENDFOR   
ENDSCAN
BROWSE

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

#4
sdta2023-05-10 17:52
SUBSTRATE() VFP中没见过这个函数
#5
王咸美2023-05-10 18:02
已修正,还请指教。

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

#6
吹水佬2023-05-10 19:14
以下是引用王咸美在2023-5-10 17:44:34的发言:
    DO CASE
       CASE SUBSTR(ls,((i-1)/5)*4+1,4)=“语文”
           Repl yw with str(jg,4)
       CASE SUBSTR(ls,((i-1)/5)*4+1,4)=“数学”
           Repl sx with str(jg,4)
       CASE SUBSTR(ls,((i-1)/5)*4+1,4)=“外语”
           Repl yy with str(jg,4)
     ENDCASE

这几句改用一句应该就可以了
REPLACE (FIELD((i-1)/5+3)) WITH jg
#7
ybq10142023-05-10 19:27
回复 楼主 王咸美
程序代码:
CLOSE TABLES
CLEAR
fz='A10B09C08D07' &&改大写,与表统一呀
ls='yw,sx,yy' &&汉字和字母无所谓,但要统一啊!
=ALINES(akm,ls,1+4,',')  &&放在数组里,很方便存取,它是内存变量呀
USE jftj IN 0
SELECT jftj
SCAN  &&就这样换
zhifu=zifu  &&把这一句换成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字段中
    REPLACE (akm[CEILING(i/5)]) WITH jg  &&就这样写入
ENDFOR   
ENDSCAN
BROWSE

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

可以这样修改你的程序

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

#8
tigerpub2023-05-10 21:42
帮助人雷锋精神是伟大的.但感觉这些很基础的问题总是求助区免费问('不耻下问')不太应该吧.论坛不对回复者帮助者搞在线捐助吗?赚自己的钱让别人代干的味道,个人觉得技术点可以讨论,忙可以适当帮,无偿代写作业代写业务功能就不太好了吧.都闲着没事干?
#9
sdta2023-05-10 22:14
结合上面各位朋友的代码,总结如下
程序代码:
CLOSE DATABASES
USE jftj
lccj = "10,9,8,7"
ALINES(acj, lccj, ",")
SCAN
    FOR ln1 = 1 TO LEN(ALLTRIM(zifu)) STEP 5
        lc1 = SUBSTR(ALLTRIM(zifu), ln1, 5)
        lnSum = 0
        FOR ln2 = 1 TO LEN(lc1)
            lc2 = SUBSTR(lc1, ln2, 1)
            lnSum = lnSum + VAL(acj[ASC(lc2) - 64]) && 只针对本例中的ABCD
        ENDFOR
        REPLACE (FIELD(2 + CEILING(ln1/5))) WITH lnSum
    ENDFOR
ENDSCAN
BROWSE
#10
ybq10142023-05-10 22:20
回复 9楼 sdta
高手就是这样,惜字如金!
#11
王咸美2023-05-11 06:03
谢谢各位!!!

[此贴子已经被作者于2023-5-11 06:04编辑过]

#12
schtg2023-05-11 06:16
学习啦,谢谢!
#13
吹水佬2023-05-11 09:03
以下是引用tigerpub在2023-5-10 21:42:19的发言:

帮助人雷锋精神是伟大的.但感觉这些很基础的问题总是求助区免费问('不耻下问')不太应该吧.论坛不对回复者帮助者搞在线捐助吗?赚自己的钱让别人代干的味道,个人觉得技术点可以讨论,忙可以适当帮,无偿代写作业代写业务功能就不太好了吧.都闲着没事干?

楼主在这论坛走过的历程也不容易,没看错的话应该不是编程科班出身。
从word、excel到vfp,从开始直接要VFP代码到现在展现自己代码与人探讨,用VFP解决了大量工作中涉及word、excel的问题实在不容易。

来编程论坛本就是为交流探讨编程问题,人家的问题也许是自己进步的动力。
不要看我回复写那么多示例代码,很多时不是在抽屉里拿出来的,很多时自己回复问题的贴都要点击“收藏”,编程的东东就是这样学到的,算是闲着没事干吗?
只有本站会员才能查看附件,请 登录



#14
laowan0012023-05-11 09:06
#15
王咸美2023-05-11 10:42
谢谢!说的对,学习vfp纯属个人爱好,后来发现发贴能够解决工作上的一些问题,确实高兴。
1