注册 登录
编程论坛 VFP论坛

下列代码如何修改?

王咸美 发布于 2025-04-15 16:27, 496 次点击
下列代码如何修改?

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

现“课务分工2025.txt”格式如下:
1     曹文亮:一(2)美术,四(3)品社,计4节
2     曹小虎:五(2)科学,五(2)数学,五(2)信息,计8节
3     曹艳:四(4)科学,四(4)数学,四(4)体育,四(4)信息,计10节
4     陈杰:四(1)英语,四(1)劳动,四(1)英阅,四(2)英语,四(2)劳动,四(2)英阅,四(4)英语,四(4)劳动,四(4)英阅,计15节
5     陈金玉:四(6)班会,四(6)语文,四(6)美术,四(6)信息,四(6)语阅,计11节

如何修改下列代码,由“课务分工2025.txt”生成各班教师任课表(jsrkb.dbf)?请高手赐教,万分感谢!!!

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



11 回复
#2
王咸美2025-04-15 17:19
关键是这几行代码如何修改
      If Like('??年级(*)班*', m.cc)
            m.c班级 = StrExtract(m.cc, '', '班', 1, 4)
            m.c科目 = Strtran(m.cc, m.c班级, '')
#3
王咸美2025-04-16 16:58
代码修改为下列语句(不起作用)

      If Like('*(*)*', m.cc)
            m.c班级 = StrExtract(m.cc, '', ' )',1, 4)
            m.c科目 = Strtran(m.cc, m.c班级, '')
#4
csyx2025-04-16 19:59
现在你的 txt 变了,原来是 tab 分隔的三列,现在教师与分工合并了,只有两列,append from ... with tab 导入时当然会丢数据
#5
csyx2025-04-16 20:15
以下是引用王咸美在2025-4-16 16:58:43的发言:
      If Like('*(*)*', m.cc)
            m.c班级 = StrExtract(m.cc, '', ' )',1, 4)
            m.c科目 = Strtran(m.cc, m.c班级, '')
这里没错

但是你的 txt 格式变了,原来是 tab 分隔的三列,现在教师与分工合并了,只有两列
从 append from ... with tab 这里开始,导入就丢数据了
#6
王咸美2025-04-16 20:57
怎么改?盼指点!谢谢!
#7
csyx2025-04-17 12:48
程序代码:
Local ii
Local c科目, c分工, c班级, c教师
Local array a科目[1], a分工[1]

Close Databases

Create cursor 任课表 (序号 I, 班级 V(15))
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(8)
EndFor
Index on 班级 tag 班级

Create Cursor 课务分工 (序号 V(3), 分工 V(254), 教师 V(8))
Append From 课务分工2025.txt delimited with tab
Update 课务分工 set 分工 = Strtran(分工, '', ':')
Update 课务分工 set 教师 = GetWordNum(分工, 1, ':'), 分工 = GetWordNum(分工, 2, ':')

Scan all for !Empty(教师)
    m.c教师 = 教师
    m.c分工 = Strtran(分工, '', ',')
    For ii = 1 to ALines(m.a分工, m.c分工, 1+4, ',')
        m.c分工 = m.a分工[m.ii]
        If Like('??(*)*', m.c分工)
            m.c班级 = StrExtract(m.c分工, '', '', 1, 4)
            m.c科目 = Strtran(m.c分工, 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(班级,'',''))
Update 任课表 set 班级 = Transform(班级+Space(2), '@R XX年级XXXXX班')
Select * from 任课表 order by 序号 into dbf jsrkb
Use in 任课表
Update jsrkb set 序号 = Recno()
Locate
Browse nowait
#8
wengjl2025-04-17 12:53
以下是引用王咸美在2025-4-16 16:58:43的发言:

代码修改为下列语句(不起作用)

      If Like('*(*)*', m.cc)
            m.c班级 = StrExtract(m.cc, '', ' )',1, 4)
            m.c科目 = Strtran(m.cc, m.c班级, '')


关键是你没理解  *(*)*   与    ??(*)*    二者的区别
#9
王咸美2025-04-17 13:59
谢谢!非常感谢!!!
#10
王咸美2025-04-17 16:13
如果将原“班级”字段拆分成两个字段:年级、班级,格式如下
年级    班级
一年级 (1)班

代码如何变通?请予指点!谢谢!
#11
csyx2025-04-17 17:08
Create cursor 任课表 (序号 I, 班级 V(15))
改成
Create cursor 任课表 (序号 I, 年级 V(10), 班级 V(15))


Update 任课表 set 序号 = Val(Chrtranc(Leftc(班级,1), '一二三四五六', '123456'))*1000 ;
                        + Val(StrExtract(班级,'',''))
Update 任课表 set 班级 = Transform(班级+Space(2), '@R XX年级XXXXX班')
改成
程序代码:
Update 任课表 set ;
    年级 = Leftc(班级,1)+'年级', ;
    班级 = StrExtract(班级,[],[],1,4)+'', ;
    序号 = Val(Chrtranc(年级, '一二三四五六', '123456'))*1000 ;
         + Val(StrExtract(班级,[],[]))


早说要分开年级和班级,也不至于写那么些脱裤子放屁的字符串提取代码了,现在这段代码已经变成了垃圾代码

[此贴子已经被作者于2025-4-17 17:23编辑过]

#12
王咸美2025-04-17 18:04
谢谢!非常感谢!!!
1