注册 登录
编程论坛 VFP论坛

怎样由课务分工.txt 动态生成教师任课表(jsrkb.dbf)

王咸美 发布于 4 天前 19:56, 329 次点击
现有 课务分工.txt文本文件,怎样动态生成如图所示的教师任课表(jsrkb.dbf),请高手赐教,万分感谢!!!
要求:
1、都是字符型字段,宽度除了 “班级”为7,其他字段宽度均为6;
2、字段由课务分工.txt中的内容动态生成,如“一年级(1)班语文”中的“语文”,依此类推;
3、由课务分工.txt动态生成如图所示的教师任课表jsrkb.dbf

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

生成的教师任课表如下图所示:
只有本站会员才能查看附件,请 登录


附:课务分工.txt(部分内容)详见附件
001      曹文亮      一年级(2)班美术,四年级(3)班品社,计4节
002      曹小虎      五年级(2)班科学,五年级(2)班数学,五年级(2)班信息,计8节
003      曹艳      四年级(4)班科学,四年级(4)班数学,四年级(4)班体育,四年级(4)班信息,计10。      节
004      陈杰      四年级(1)班英语,四年级(1)班劳动,四年级(1)班英阅,四年级(2)班英语,四年级(2)班劳动,四年级(2)班英阅,四年级(4)班英语,四年级(4)班劳动,四年级(4)班英阅,计15节
005      陈金玉      四年级(6)班班会,四年级(6)班语文,四年级(6)班美术,四年级(6)班信息,四年   级(6)班语阅,计11节
006      陈留英      六年级(1)班语文,六年级(1)班音乐,六年级(1)班语阅,计8节
007      陈苏艳      四年级(3)班班会,四年级(3)班英语,四年级(3)班英阅,四年级(5)班英语,四年级(5)班劳动,四年级(5)班英阅,四年级(6)班英语,四年级(6)班劳动,四年级(6)班英阅,计15节
008      陈天明      三年级(1)班音乐,三年级(2)班音乐,三年级(6)班音乐,四年级(1)班音乐,四年级(3)班音乐,五年级(1)班音乐,五年级(2)班音乐,五年级(3)班音乐,计16节

5 回复
#2
sw39293 天前 05:57
我不是高手,看法是,先用文件函数fopen()打开文本,再用文件函数逐行读取,按宽度写入dbf表
#3
wengjl3 天前 08:44
是前一个帖子的翻版,稍作修正,请测试
      *****************
      * 将TXT文档内容,按需要转换DBF的教师任课安排表中
      * 2025-4-2星期三
      *****************
      CLEAR ALL
      SET TALK OFF
      SET SAFETY OFF
      PUBLIC k1,k2,nn,zfcall,i,zfc,cnj,cbj,cxk,xm
      CLOSE DATABASES
      CREATE TABLE njbj(nj c(6),bj c(7))
      FOR i=1 to 6
        FOR j=1 to 6
          SELECT njbj
          APPEND BLANK
          REPLACE bj with [(]+ALLTRIM(STR(j))+[)班]
          DO case
            CASE i=1
              REPLACE nj with [一年级]
            CASE i=2
              REPLACE nj with [二年级]
            CASE i=3
              REPLACE nj with [三年级]
            CASE i=4
              REPLACE nj with [四年级]
            CASE i=5
              REPLACE nj with [五年级]
            CASE i=6
              REPLACE nj with [六年级]      
          ENDCASE
        ENDFOR
      ENDFOR
      CLOSE DATABASES
      SELECT 0
      USE jsrkb alia bmk
      ZAP
      APPEND FROM njbj
      lcFile = FILETOSTR("课务分工.TXT")
      lnLines = ALINES(laLines, lcFile, .T., CHR(13) + CHR(10))
      FOR EACH lcLine IN laLines
         lnFields = ALINES(laFields, lcLine, .T., CHR(9))  
         IF lnFields < 3
            LOOP  && 跳过不完整行
         ENDIF
         xm = ALLTRIM(laFields[2])
         zfcall = ALLTRIM(laFields[3])
         k1=1
         nn=OCCURS([,],zfcall)
         FOR i=1 to nn
            k2=AT([,],zfcall,i)  
            zfc=SUBSTR(zfcall,k1,k2-k1)
            cnj=SUBSTR(zfc,1,6)  
            cbj=SUBSTR(zfc,7,7)   
            cxk=SUBSTR(zfc,14)   
            k1=k2+2
            SELECT bmk
            LOCATE for bmk.nj=cnj and bmk.bj=cbj
            IF FOUND()
               REPLACE &cxk. with xm
            ENDIF
         ENDFOR
      ENDFOR      
      CLOSE ALL
      SET SAFETY ON
      SET TALK ON
      MESSAGEBOX("数据转换完成!", 64, "提示:")
      QUIT



[此贴子已经被作者于2025-4-2 08:57编辑过]

#4
王咸美3 天前 10:28
谢谢你的热心指点!程序运行正常。但我想jsrkb.dbf中的字段由 课务分工.txt中的内容动态生成,如遇到“一年级(1)班语文”则生成“语文”字段,遇到“三年级(3)班美术”则生成“美术”字段,……直到所有学科的字段生成完毕,也就是说jsrkb的结构是动态生成的,字段名、字段个数由“课务分工.txt"的内容决定的。不知程序能否实现,请予指导。

[此贴子已经被作者于2025-4-2 10:33编辑过]

#5
wengjl3 天前 11:27
以下是引用王咸美在2025-4-2 10:28:26的发言:

谢谢你的热心指点!程序运行正常。但我想jsrkb.dbf中的字段由 课务分工.txt中的内容动态生成,如遇到“一年级(1)班语文”则生成“语文”字段,遇到“三年级(3)班美术”则生成“美术”字段,……直到所有学科的字段生成完毕,也就是说jsrkb的结构是动态生成的,字段名、字段个数由“课务分工.txt"的内容决定的。不知程序能否实现,请予指导。


可以实现的,要后半月有时间调试
#6
王咸美3 天前 12:02
谢谢你!静候佳音!

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

1