| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 245 人关注过本帖
标题:求助:下列代码不能生成教师任课表(jsrkb1.dbf)
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:711
专家分:3
注 册:2018-1-4
结帖率:97.67%
收藏
已结贴  问题点数:20 回复次数:8 
求助:下列代码不能生成教师任课表(jsrkb1.dbf)
下列代码不能由“课务分工.txt”生成 教师任课表(jsrkb1.dbf),请高手赐教,万分感谢!!!
由课务分工.txt生成教师任课表(jsrkb1.dbf).rar (33.28 KB)

图片附件: 游客没有浏览图片的权限,请 登录注册


课务分工.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节
…………

程序代码(有错误)
*!* 由课务分工.txt生成教师任课表(jsrkb1.dbf)
CLOSE DATABASES
cPath=ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cPath)
USE jsrkb1
ZAP
INDEX ON nj + bj TAG njbj
cStr = FILETOSTR("课务分工.txt")
ALINES(laStr, lcStr, 4 + 1)
FOR ln1 = 1 TO ALEN(laStr, 1)
     FOR ln2 = 3 TO ALINES(la, laStr[ln1], 4 + 1, ",", CHR(9)) - 1
     
        lcnj = STREXTRACT(la[ln2], "", "(")
        lcbj = "(" + STREXTRACT(la[ln2], "(", "班") + "班"
        lckc = STREXTRACT(la[ln2],"班", "")
        IF SEEK(lcnj + lcbj, "jsrkb1") = .T.
            REPLACE (lckc) WITH la[2]
        ELSE
            APPEND BLANK
            REPLACE nj WITH lcnj, bj WITH lcbj, (lckc) WITH la[2]
        ENDIF
    ENDFOR
ENDFOR
SELECT *, 0 xh FROM jsrkb1 INTO CURSOR lsb READWRITE
REPLACE xh WITH ICASE(LEFT(nj, 2) == "一", 1,LEFT(nj, 2) == "二", 2, LEFT(nj, 2) == "三", 3, LEFT(nj, 2) == "四", 4,LEFT(nj, 2) == "五", 5, 6) ALL
SELECT * FROM lsb ORDER BY xh, nj, bj
3 天前 13:17
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2260
专家分:4048
注 册:2007-4-27
收藏
得分:0 
分二步走:
第一步将 TXT 转换成 DBF; 第二步 DBF 转 DBF 估计黄老师能解决的
SET TALK OFF
SET SAFETY OFF

* 创建DBF表结构
CREATE TABLE 课务分工 ( 编号 C(3), 姓名 C(20),课程信息 c(120), 总课时数 N(3))

* 读取文本文件内容
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
   
    * 提取基础字段
    lc编号   = ALLTRIM(laFields[1])
    lc姓名   = ALLTRIM(laFields[2])
    lc原始内容 = ALLTRIM(laFields[3])
   
    * 提取总课时数
    ln课时起始 = RAT("计", lc原始内容)  && 防止课程名含“计”
    IF ln课时起始 > 0
        lc课时 = STREXTRACT(SUBSTR(lc原始内容, ln课时起始), "计", "节", 1)
        ln课时 = VAL(lc课时)
        lc课程 = ALLTRIM(LEFT(lc原始内容, ln课时起始 - 1))
    ELSE
        lc课程 = lc原始内容
        ln课时 = 0
    ENDIF   
    * 插入记录
    INSERT INTO 课务分工 (编号, 姓名, 课程信息, 总课时数);
        VALUES (lc编号, lc姓名, lc课程, ln课时)
ENDFOR

CLOSE ALL
SET SAFETY ON
SET TALK ON

MESSAGEBOX("数据转换完成!", 64, "提示")

只求每天有一丁点儿的进步就可以了
前天 08:11
王咸美
Rank: 1
等 级:新手上路
帖 子:711
专家分:3
注 册:2018-1-4
收藏
得分:0 
水平有限,还望赐教。谢谢!
前天 09:34
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2260
专家分:4048
注 册:2007-4-27
收藏
得分:0 
第二步D表转D表.rar (4.66 KB)


      ***************
      * 名称:txt文档到dbf的第二步
      *       (高手应该可以更简代码完成)
      * 时间:2025-4-1
      ***************
      CLOSE DATABASES
      SET SAFETY off
      PUBLIC k1,k2,xm,nn,zfcall,i,zfc,cnj,cbj,cxk
      
      SELECT 0
      USE jsrkb1 alia bmk
      ZAP
      APPEND FROM njbj
      SELECT 0
      USE 课务分工 alia kg
      SCAN
        k1=1
        xm=kg.姓名
        nn=OCCURS([,],kg.课程信息)
        zfcall=ALLTRIM(kg.课程信息)
        FOR i=1 to nn
          k2=AT([,],zfcall,i)               &&& 获取“,”的位置值
          zfc=SUBSTR(zfcall,k1,k2-k1)       &&& 取逗号分隔的字符串
          cbj=STREXTRACT(zfc,[(],[)])     &&& 取班级名
          cnj=SUBSTR(zfc,1,AT([(],zfc)-1)  &&& 取年级名称(一、...、六)
          cxk=SUBSTR(zfc,AT([)],zfc)+2)    &&& 取“)”后的学科名称
          k1=k2+1
          SELECT bmk
          LOCATE for bmk.nj=cnj and bmk.bj=cbj
          IF FOUND()
            REPLACE &cxk. with xm
          ENDIF
        ENDFOR
        SELECT kg
      ENDSCAN
      CLOSE DATABASES
      QUIT

只求每天有一丁点儿的进步就可以了
前天 10:04
王咸美
Rank: 1
等 级:新手上路
帖 子:711
专家分:3
注 册:2018-1-4
收藏
得分:0 
@wengji 谢谢你的耐心指点!一定好好学习消化吸收。
前天 12:06
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2260
专家分:4048
注 册:2007-4-27
收藏
得分:20 
合并成了一个PRG文档,那就一步到位了
      SET TALK OFF
      SET SAFETY OFF
      CLOSE DATABASES
      PUBLIC k1,k2,xm,nn,zfcall,i,zfc,cnj,cbj,cxk,lc姓名,lc原始内容,ln课时起始,lc课程
      SELECT 0
      USE jsrkb1 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
         lc姓名   = ALLTRIM(laFields[2])
         lc原始内容 = ALLTRIM(laFields[3])
         ln课时起始 = RAT("计", lc原始内容)  && 防止课程名含“计”
         IF ln课时起始 > 0
            lc课程 = ALLTRIM(LEFT(lc原始内容, ln课时起始 - 1))
         ELSE
            lc课程 = lc原始内容
            ln课时 = 0
         ENDIF
         k1=1
         nn=OCCURS([,],lc课程)
         zfcall=ALLTRIM(lc课程)
         FOR i=1 to nn
            k2=AT([,],zfcall,i)  
            zfc=SUBSTR(zfcall,k1,k2-k1)
            cbj=STREXTRACT(zfc,[(],[)])  
            cnj=SUBSTR(zfc,1,AT([(],zfc)-1)
            cxk=SUBSTR(zfc,AT([)],zfc)+2)
            k1=k2+1
            SELECT bmk
            LOCATE for bmk.nj=cnj and bmk.bj=cbj
            IF FOUND()
               REPLACE &cxk. with lc姓名
            ENDIF
         ENDFOR
      ENDFOR
      CLOSE DATABASES
      SET SAFETY ON
      SET TALK ON
      MESSAGEBOX("数据转换完成!", 64, "提示:")
      QUIT

只求每天有一丁点儿的进步就可以了
前天 14:52
王咸美
Rank: 1
等 级:新手上路
帖 子:711
专家分:3
注 册:2018-1-4
收藏
得分:0 
如能快速建立表文件njbj.dbf,就更好了。
前天 15:21
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2260
专家分:4048
注 册:2007-4-27
收藏
得分:0 
CREATE TABLE njbj(nj c(2),bj c(2))
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

可以结贴了!

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


只求每天有一丁点儿的进步就可以了
前天 15:36
王咸美
Rank: 1
等 级:新手上路
帖 子:711
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!
前天 16:46
快速回复:求助:下列代码不能生成教师任课表(jsrkb1.dbf)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027481 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved