Foxtable(狐表)用户栏目专家坐堂 → 求助:列拆分问题


  共有25831人关注过本帖树形打印复制链接

主题:求助:列拆分问题

帅哥哟,离线,有人找我吗?
abcdzabcdz
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:324 积分:3807 威望:0 精华:0 注册:2008/9/1 7:34:00
求助:列拆分问题  发帖心情 Post By:2008/12/9 7:35:00 [只看该作者]

  求助:列拆分问题

说明:希望根据“样本”表自动生成”排列表”,排列方式见该表内容.

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:样本问题.table


 回到顶部
帅哥哟,离线,有人找我吗?
don
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2008/12/9 9:44:00 [只看该作者]

强烈抗议:楼主常把应设置为整数的列设置为字符型

'''
Dim Da As DataTable = DataTables("样本")
Dim ls As  List(of DataRow) = da.Select("班级 Is not null","班级")
Dim i,r,n As Integer
r =Da.Compute("Count(班级)","班级 Is not null")
r = -int(-r/3)
DataTables("排列表").DataRows.clear
Tables("排列表").Addnew(r)

For i =1 to 3
        For n = 0 to r-1
               Tables("排列表").Rows(n)("班级" & i) =Ls((i-1)*r+n)("班级")
               Tables("排列表").Rows(n)("姓名"& i) = Ls((i-1)*r+n)("姓名")
        Next
Next

[此贴子已经被作者于2008-12-9 11:14:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
abcdzabcdz
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:324 积分:3807 威望:0 精华:0 注册:2008/9/1 7:34:00
  发帖心情 Post By:2008/12/9 10:37:00 [只看该作者]

冤枉,我从来没有设置过数据类型啊!-----呵呵,由于FOXTABLE设置类型不太方便,故常用EXCEL设计表格,再导入,速度明显加快,但类型必须修改,下次改正.  谢谢DON版主!

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/12/9 13:05:00 [只看该作者]

我也交作业,早上一上班就做这个,结果做了一半,就停电了:

 

Dim Count As Integer = Math.Ceiling(DataTables("样本").DataRows.Count / 3)

DataTables("排列表").DataRows.Clear()

Dim dr1,dr2 As DataRow

Tables("排列表").AddNew(Count)

For c As Integer = 0 To 2

    For r As Integer = 0 To Count - 1

      dr1 = DataTables("排列表").DataRows(r)

      dr2 = DataTables("样本").DataRows(Count * c + r)

      dr1("班级" & (c+1)) = dr2("班级")

      dr1("姓名" & (c+1)) = dr2("姓名")

    Next

Next

[此贴子已经被作者于2008-12-9 13:17:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yuanbin
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:102 积分:880 威望:0 精华:4 注册:2008/8/31 21:47:00
  发帖心情 Post By:2008/12/9 15:19:00 [只看该作者]

样本表中数据太有规律了,班级是排序的,班级的抽样人员是固定的3人。假设抽样人员不是固定的,比如6班级是4个人,追加到原来的表后面,未排序。要求拆分时,按班级序号连续拆分,而且,同一个班级人必须在同一列中,不能拆分到2列中。以上代码就要改改了。(先将班级列类型改为数字型)
Dim dr1,dr2 As DataRow
dim pmr as integer =Math.floor(datatables("样本").compute("count(班级)","班级 <> 0")/3) '排名表3等分后平均行数
Dim drs As List(Of DataRow) =datatables("样本").select("[班级]<> 0","班级")  '取不含空行且排序后的样本表
dim r as integer=0  '排列表的行指针
dim c as integer=1  '排列表的列名序号指针
datatables("排列表").datarows.clear()
for i as integer = 0 to drs.count-1    '遍历有效的样本表
    dr1=drs(i)    '读样本表当前行
    if r>= pmr then  '排列表的当前指针行大于排名表3等分后的平均行数,
       if dr1("班级")<>drs(i-1)("班级")  '如果和上一行的班级不相同
          c=c+1  ' 排列表的列指针加1
          r=0    ' 排列表的行指针归0,指向第一行
       end if
    end if       
    if datatables("排列表").datarows.count<r+1 then    ' 实际行数小于即将写数的指针行
       dr2 = DataTables("排列表").AddNew()    '增加行
    else
       dr2= DataTables("排列表").datarows(r)        
    end if
    dr2("班级" & c)=dr1("班级")    '填数据
    dr2("姓名" & c)=dr1("姓名")      
    r=r+1  
next

[此贴子已经被作者于2008-12-9 16:13:35编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/12/9 16:16:00 [只看该作者]

哈哈,老袁厉害,学习ing...

图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
don
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2008/12/9 16:35:00 [只看该作者]

向老袁学习!思维严密,条理清晰!

[此贴子已经被作者于2008-12-9 16:44:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
gdlgh
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:449 积分:3506 威望:0 精华:5 注册:2008/9/1 2:32:00
  发帖心情 Post By:2008/12/9 19:25:00 [只看该作者]

一题多解,交流下!

说明:班级列为数值类型

dim h as integer = Tables("样本").count\3\3
DataTables("排列表").DataRows.Clear()
dim j as integer = 1
dim f As New Filler
f.SourceTable = DataTables("样本") '指定数据来源
f.SourceCols = "班级,姓名" '指定数据来源列
f.DataTable = DataTables("排列表") '指定数据接收表
f.Append = false
for i as integer = 1 to DataTables("排列表").datacols.count/2
    f.DataCols = "班级" & i & ",姓名" & i '指定数据接收列
    f.Filter = "[班级]>=" & j & "and [班级]<=" & j+h-1
    f.Fill() '填充数据
    j += h
next
[此贴子已经被作者于2008-12-9 19:26:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33957 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2008/12/9 19:52:00 [只看该作者]

好。

全部收下。

 回到顶部
帅哥哟,离线,有人找我吗?
abcdzabcdz
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:324 积分:3807 威望:0 精华:0 注册:2008/9/1 7:34:00
  发帖心情 Post By:2008/12/10 7:34:00 [只看该作者]

一解多解,学习中.......


 回到顶部
总数 11 1 2 下一页