以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]转换遇到问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=5469)

--  作者:abcdzabcdz
--  发布时间:2009/12/13 19:52:00
--  [求助]转换遇到问题
在将"课程表"转换为"课时名单"时,不希望将"1班","2班",....."99班"转换到"姓名"列中,"星期"列不只显示星期几不想显示第几节(如:希望星期列中出现"星期一","星期二",.....,不希望出现"星期一_1","星期二_2",........,请问下列代码如何修改?谢谢
dim h as integer =0
DataTables("课时名单").DataRows.Clear()
For Each drkc As DataRow In DataTables("课程表").DataRows
    for Each dckc as Datacol in DataTables("课程表").Datacols
        if drkc(dckc) isnot nothing  then                                      
                   if drkc(dckc) <> "" then
                       Dim drmd As DataRow
                       h=h+1
                       drmd = DataTables("课时名单").DataRows.AddNew()
                       drmd("星期") = dckc.name
                       drmd("姓名") = drkc(dckc)
                       drmd("计分") = 1
                   end if   
          end if
     next
next
Messagebox.Show("处理完毕!")
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者:mr725
--  发布时间:2009/12/13 21:07:00
--  


DataTables("课时名单").DataRows.Clear()
For Each drkc As DataRow In DataTables("课程表").DataRows
    for i as integer = 1 to Tables("课程表").cols.count -1  
        if drkc(Tables("课程表").cols(i).name) isnot nothing and drkc(Tables("课程表").cols(i).name) <> "班级"  then                                      
                   if drkc(Tables("课程表").cols(i).name) <> "" then
                       Dim drmd As DataRow
                       drmd = DataTables("课时名单").DataRows.AddNew()
                       drmd("星期") = Tables("课程表").cols(i).name.split("_")(0)
                       drmd("姓名") = drkc(Tables("课程表").cols(i).name)
                       drmd("计分") = 1
                   end if   
          end if
     next
next
Messagebox.Show("处理完毕!")
[此贴子已经被作者于2009-12-13 21:12:24编辑过]

--  作者:czy
--  发布时间:2009/12/13 21:19:00
--  
也可以:

Dim Values() As String
dim h as integer =0
DataTables("课时名单").DataRows.Clear()
For Each drkc As DataRow In DataTables("课程表").DataRows
    for Each dckc as Datacol in DataTables("课程表").Datacols
        if drkc(dckc) isnot nothing  then
            if drkc(dckc) <> "" then
                Dim drmd As DataRow
                h=h+1
                drmd = DataTables("课时名单").DataRows.AddNew()
                Values = dckc.name.split("_")
                drmd("星期") = Values(0)
                drmd("姓名") = drkc(dckc)
                drmd("计分") = 1
            end if
        end if
    next
next
Messagebox.Show("处理完毕!")

--  作者:abcdzabcdz
--  发布时间:2009/12/13 21:42:00
--  
以下是引用czy在2009-12-13 21:19:00的发言:
也可以:

Dim Values() As String
dim h as integer =0
................

    "星期"列处理:我压根儿没想到用split函数来处理,一直试图用SubString函数解决问题. 

[此贴子已经被作者于2009-12-13 22:17:07编辑过]

--  作者:abcdzabcdz
--  发布时间:2009/12/13 21:54:00
--  
以下是引用mr725在2009-12-13 21:07:00的发言:
DataTables("课时名单").DataRows.Clear()
.........
Messagebox.Show("处理完毕!")

谢谢mr725.

[此贴子已经被作者于2009-12-13 22:17:41编辑过]

--  作者:mr725
--  发布时间:2009/12/13 21:57:00
--  

上面代码速度都太慢了!~  要二、三十秒钟啊(我电脑老了) ~      且变量 h 好像没用哦~  
应该可以提高n倍的速度就好了~ 


--  作者:abcdzabcdz
--  发布时间:2009/12/13 22:06:00
--  

用if语句控制列是一种方法;不知用for each语句能否控制列?
比如:
1.从遍历从第2列开始的所有列?
2.遍历第2至15列?
3.遍历除第7列的所有列.
若能直接用for each语句控制列就更方便了.


--  作者:czy
--  发布时间:2009/12/13 22:19:00
--  
以下是引用abcdzabcdz在2009-12-13 22:06:00的发言:

用if语句控制列是一种方法;不知用for each语句能否控制列?
比如:
1.从遍历从第2列开始的所有列?
2.遍历第2至15列?
3.遍历除第7列的所有列.
若能直接用for each语句控制列就更方便了.


if dckc.name <> "星期一_1" Then
    if drkc(dckc) isnot nothing  then
.....


--  作者:abcdzabcdz
--  发布时间:2009/12/13 22:29:00
--  

C老师高招,for...each与if语句结合代码很轻易解决7楼问题.谢谢!


--  作者:abcdzabcdz
--  发布时间:2009/12/13 22:35:00
--  
以下是引用mr725在2009-12-13 21:57:00的发言:

上面代码速度都太慢了!~  要二、三十秒钟啊(我电脑老了) ~      且变量 h 好像没用哦~  
应该可以提高n倍的速度就好了~ 

的确较慢,转换生成5940条记录需19秒,提高速度只有看贺老师了.