| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 333 人关注过本帖
标题:这段代码无法正常运行
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:727
专家分:3
注 册:2018-1-4
结帖率:97.73%
收藏
已结贴  问题点数:20 回复次数:17 
这段代码无法正常运行
下列代码无法运行
由“课务分工.txt"表生成各班教师任课表(jsrkb.dbf),代码无法运行,请高手赐教,万分感谢!!!


程序代码(有点问题)

CLEAR ALL
CLOSE DATABASES ALL
SET SAFETY OFF
SET TALK OFF
SET CPCOMPILE TO 936  && 设置中文编码支持

* 创建临时表存储原始分工数据
CREATE CURSOR temp_data (;
    teacher_id C(3),;
    teacher_name C(20),;
    class_subj C(100);
)

* 导入课务分工.txt数据
APPEND FROM 课务分工.txt TYPE DELIMITED WITH TAB

* 创建目标表结构
CREATE TABLE jsrkb.dbf ;
(;
    N       N(3),       && 序号;
    B       C(20),      && 班级;
    班会    C(10),;
    道法    C(10),;
    品社    C(10),;
    科学    C(10),;
    语文    C(10),;
    数学    C(10),;
    英语    C(10),;
    体育    C(10),;
    音乐    C(10),;
    美术    C(10),;
    劳动    C(10),;
    信息    C(10),;
    综合    C(10),;
    语阅    C(10),;
    英阅    C(10),;
    自习1   C(10),;
    自习2   C(10);
)

* 解析数据主程序
LOCAL lcClass, lcSubject, lcTeacher
LOCAL ARRAY laClasses[1], laSubjects[18]
DIMENSION laSubjects[18]

* 定义学科映射表
laSubjects[1] = "班会"
laSubjects[2] = "道法"
laSubjects[3] = "品社"
laSubjects[4] = "科学"
laSubjects[5] = "语文"
laSubjects[6] = "数学"
laSubjects[7] = "英语"
laSubjects[8] = "体育"
laSubjects[9] = "音乐"
laSubjects[10] = "美术"
laSubjects[11] = "劳动"
laSubjects[12] = "信息"
laSubjects[13] = "综合"
laSubjects[14] = "语阅"
laSubjects[15] = "英阅"
laSubjects[16] = "自习1"
laSubjects[17] = "自习2"

* 获取所有班级列表
SELECT DISTINCT LEFT(class_subj, AT("班", class_subj)) AS classname FROM temp_data INTO ARRAY laClasses

* 主处理循环
FOR i = 1 TO ALEN(laClasses)
    lcClass = ALLTRIM(laClasses[i])
   
    * 插入新记录
    INSERT INTO jsrkb (N, B) VALUES (i, lcClass)
   
    * 处理每个学科
    FOR j = 1 TO ALEN(laSubjects)
        lcSubject = laSubjects[j]
        
        * 查找第一个匹配的教师
        SELECT TOP 1 teacher_name FROM temp_data ;
        WHERE class_subj LIKE lcClass + "%" + lcSubject + "%" ;
        INTO CURSOR cur_temp
        
        IF _TALLY > 0
            lcTeacher = cur_temp.teacher_name
            REPLACE IN jsrkb (lcSubject) WITH lcTeacher
        ENDIF
        
        USE IN cur_temp
    ENDFOR
ENDFOR

* 清理临时数据
USE IN temp_data
ERASE temp_data.dbf

* 最终整理
USE jsrkb
BROWSE TITLE "教师任课表生成结果"
RETURN

课务分工.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节
 009      陈文生      一年级(2)班语文,一年级(2)班综合,一年级(2)班语阅,一年级(2)班自习1,计10节
 010      陈羊成      三年级(6)班体育,四年级(5)班体育,四年级(6)班体育,五年级(5)班体育,五年级(6)班体育,计15节


6 天前 07:10
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2272
专家分:4089
注 册:2007-4-27
收藏
得分:0 
* 查找第一个匹配的教师
        SELECT TOP 1 teacher_name FROM temp_data ;
        WHERE class_subj LIKE lcClass + "%" + lcSubject + "%" ;
        INTO CURSOR cur_temp
测试是这一句有错,提示:需要有 orde by 子句,可加了子句还是不行!

只求每天有一丁点儿的进步就可以了
6 天前 15:36
王咸美
Rank: 1
等 级:新手上路
帖 子:727
专家分:3
注 册:2018-1-4
收藏
得分:0 
程序如何修改,盼指点!谢谢!
6 天前 21:58
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1962
专家分:3849
注 册:2012-2-29
收藏
得分:0 
可能需要查看一下数据表temp_data中是否有记录?
5 天前 06:29
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2272
专家分:4089
注 册:2007-4-27
收藏
得分:10 
中间段修正不了,只好跳出来,换了另一车道,仅供参考 !

* 程序代码(有点问题)
* 生成 jsrkb.dbf 完整代码
* 作者:AI助手
* 日期:2023-10-15
* 源自:https://bbs.bc-cn.net/thread-514256-1-1.html
* 调试:于2025-4-11完成 (依理解,用会的,进行修正,成功)

    CLEAR ALL
    CLOSE DATABASES
    SET SAFETY OFF
    SET TALK OFF
    SET CPCOMPILE TO 936  && 设置中文编码支持
    LOCAL lcClass, lcSubject, lcTeacher
    LOCAL ARRAY laClasses[1], laSubjects[18]
    DIMENSION laSubjects[18]   
   
    CREATE TABLE temp(id C(5),name C(20),class_subj C(180))  &&& 创建了表
    SELECT temp
    APPEND FROM 课务分工.txt TYPE DELIMITED WITH TAB  &&& 导入课务分工.txt数据 (导入的又一个写法)   
    CREATE TABLE jsrkb_X(classname C(20),班会 C(10),道法 C(10),品社 C(10),科学 C(10),语文 C(10),数学 C(10),英语 C(10),;
           体育 C(10),音乐 C(10),美术 C(10), 劳动 C(10),信息 C(10),综合 C(10),语阅 C(10),英阅 C(10),自习1 C(10),自习2 C(10))   &&& 创建目标表结构
*!*    定义学科映射表   这一段,我一个50后的不会用,所以注释掉了 !
*!*        laSubjects[1] = "班会"
*!*        laSubjects[2] = "道法"
*!*        laSubjects[3] = "品社"
*!*        laSubjects[4] = "科学"
*!*        laSubjects[5] = "语文"
*!*        laSubjects[6] = "数学"
*!*        laSubjects[7] = "英语"
*!*        laSubjects[8] = "体育"
*!*        laSubjects[9] = "音乐"
*!*        laSubjects[10] = "美术"
*!*        laSubjects[11] = "劳动"
*!*        laSubjects[12] = "信息"
*!*        laSubjects[13] = "综合"
*!*        laSubjects[14] = "语阅"
*!*        laSubjects[15] = "英阅"
*!*        laSubjects[16] = "自习1"
*!*        laSubjects[17] = "自习2"
    * 获取所有班级列表到数组(laClasses)中
    SELECT DISTINCT LEFT(class_subj, AT("班", class_subj)+1) AS classname FROM temp INTO  ARRAY laClasses   && 提取唯一的年级班级名
    SELECT jsrkb_x
    APPEND FROM array laclasses
    CLOSE DATABASES
    * 转换处理
    SELECT 0
    USE temp alia kg
    SELECT 0
    USE jsrkb_x alia bmk
    SELECT bmk
    SCAN
      bjm=ALLTRIM(bmk.classname)
      SELECT kg
      SCAN
        rkap=ALLTRIM(kg.name)+[,]+ALLTRIM(kg.class_subj)
        lnLines = ALINES(laLines, rkap , .T. )  &&& 将表字段值赋值到数组中
        IF bjm$rkap  &&& 跳过不包含班级名的
          FOR EACH lcLine IN laLines
            lnFields = ALINES(laFields, lcLine, .F., [,])  
            jsxm=lafields(1)
            FOR k=2 to lnfields - 1
              njbjm= laFields(k)
              IF bjm$njbjm
                xkmc= STUFF(njbjm,1,len(bjm),[])       &&& 将包含的替换为空,留下的即为学科。
                zdm=[bmk.]+xkmc
                REPLACE &zdm. with jsxm
              ENDIF
            ENDFOR
          NEXT
        ENDIF
        SELECT kg
      ENDSCAN
      SELECT bmk
    ENDSCAN
    CLOSE DATABASES
    * 清理临时数据
    ERASE temp.dbf
    MESSAGEBOX("教师任课表生成结果 !",64,"提示:")
    QUIT

只求每天有一丁点儿的进步就可以了
5 天前 11:34
王咸美
Rank: 1
等 级:新手上路
帖 子:727
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!非常感谢!
5 天前 12:38
王咸美
Rank: 1
等 级:新手上路
帖 子:727
专家分:3
注 册:2018-1-4
收藏
得分:0 
经验证,少 五年级(6)班教师任课情况
5 天前 13:19
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2272
专家分:4089
注 册:2007-4-27
收藏
得分:0 
    * 获取所有班级列表到数组(laClasses)中
    SELECT DISTINCT LEFT(class_subj, AT("班", class_subj)+1) AS classname FROM temp INTO  ARRAY laClasses   && 提取唯一的年级班级名

是这一句生成班级时 ,少 五年级(6)班 。我也不知何故。  用我会的取出唯一的班级 需要写很长一段语句 哦!

只求每天有一丁点儿的进步就可以了
5 天前 15:51
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:774
专家分:3040
注 册:2018-3-13
收藏
得分:10 
前面ds生成的代码跟垃圾差不了多少,给你段人写的代码吧
程序代码:
Local cc, ii
Local c科目, c班级, c分工, c教师
Local array a字段[1], a科目[1], aTemp[1]

Close Databases
Create cursor 任课表 (序号 I, 班级 V(20))
c科目 = '班会,道法,品社,科学,语文,数学,英语,体育,音乐,美术,劳动,信息,综合,语阅,英阅,自习1,自习2'
For ii = 1 to ALines(m.a科目, m.c科目, 1+4, ',')
    m.c科目 = m.a科目[m.ii]
    Alter table 任课表 add column &c科目 V(10)
EndFor
Index on 班级 tag 班级

Create Cursor 课务分工 (序号 V(3), 教师 V(10), 分工 V(254))
Append From 课务分工.txt DELIMITED with tab
Scan all
    m.c教师 = 教师
    m.c分工 = Strtran(分工, '', ',')
    For ii = 1 to ALines(aTemp, m.c分工, 1+4, ',')
        m.cc = aTemp[m.ii]
        If Like('??年级(*)班*', m.cc)
            m.c班级 = StrExtract(m.cc, '', '', 1, 4)
            m.c科目 = Strtran(m.cc, m.c班级, '')
            If !Seek(m.c班级, '任课表')
                Insert into 任课表 (班级) Values (m.c班级)
            EndIf
            Replace next 1 (m.c科目) with m.c教师 in 任课表
        EndIf
    EndFor
EndScan
Use in 课务分工

Update 任课表 set 序号 = Val(Chrtranc(Leftc(班级,1), '一二三四五六', '123456'))*1000 ;
                        + Val(StrExtract(班级,'',''))
Select * from 任课表 order by 序号 into dbf jsrkb
Use in 任课表
Alter table jsrkb alter column 序号 V(3)
Update jsrkb set 序号 = Padl(Recno(), 3, '0')
Locate
Browse nowait




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


这家伙很懒,啥也没留下
5 天前 17:54
王咸美
Rank: 1
等 级:新手上路
帖 子:727
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!
5 天前 19:33
快速回复:这段代码无法正常运行
数据加载中...
 
   



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

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