以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- 筛选符合条件的列 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=81132)
|
-- 作者:漂亮美眉vszh
-- 发布时间:2016/2/19 9:52:00
-- 筛选符合条件的列
1.连续2个(未知数,也有可能是 连续3个)大于0.56的数据;
2.符合条件的列 找到后,用什么方法来获取这几列数?用隐藏试了下不行,用
Dim dtb As New DataTableBuilder("统计") dtb.AddDef("产品", GetType(String), 32) dtb.AddDef("客户", GetType(String), 32) dtb.AddDef("数量", GetType(Integer)) dtb.AddDef("金额", GetType(Double)) dtb.Build() MainTable= Tables("统计")
用这种方法不知道如何获取符合条件的列?求老师们帮助~~
此主题相关图片如下:筛选列.png

|
-- 作者:漂亮美眉vszh
-- 发布时间:2016/2/19 9:54:00
--
\'\'1.所有列设置隐藏 \'\'2.定义变量,获取K值,并获取样本值 \'\'3 Tables("管制图_Table3").Filter = "管制图编号 = \'" & Tables("控制图主表").Current("管制图编号") & "\'"
\'n = 样本 Dim n As Integer = Tables("控制图主表").Current("样本容量") Dim k1 As WinForm.TextBox = e.Form.Controls("TextBox1") Dim k As Integer = k1.value Dim sz As Integer = Tables("控制图主表").Current("中心限CL") For i2 As Integer = 3 To Tables("管制图_Table3").Cols.count - 1 Tables("管制图_Table3").Cols(i2).Visible = False Next \'K = 最终筛选列数 \'sz = 要对比的中心数值 \'Dim n As Integer \'定义样本 \'Dim k As Integer \'定义 Dim i As Integer \'符合条件数 Dim i3 As Integer Dim i4 As Integer Dim a As Integer For a = 3 To n + 3 \'i3 = a If Tables("管制图_Table3").rows(7)(a) > sz Then
For i3 = a To a + k If Tables("管制图_Table3").rows(7)(i3) >= sz Then i = i + 1 If i >= k Then For i4 = a - i To a Tables("管制图_Table3").Cols(i4).Visible = True Next \'符合条件隐藏 End If End If i = 0 Next End If Next
这是我自己瞎写的,思路是先隐藏列,然后符合条件的列取消隐藏,但测试不成功,想不到用什么方法~~
|
-- 作者:大红袍
-- 发布时间:2016/2/19 9:56:00
--
上传具体实例,说明要做什么效果。
|
-- 作者:漂亮美眉vszh
-- 发布时间:2016/2/19 10:28:00
--
1.找批号列Xbar的行中,连续2个出现(未知数,也有可能是 连续3个)大于0.56的列数据;
2.生成一个临时表,接收这几列的符合条件的数据,符合条件的也是就上图中画红框内的两列数据
3.谢谢大红袍老师~~
|
-- 作者:大红袍
-- 发布时间:2016/2/19 10:43:00
--
你例子想说明什么啊?什么都没有啊。
|
-- 作者:漂亮美眉vszh
-- 发布时间:2016/2/19 10:53:00
--
以下是引用大红袍在2016/2/19 10:43:00的发言: 你例子想说明什么啊?什么都没有啊。
连续2次出现(未知数,也有可能是 连续3个)大于0.56的列数据;注意不是行,是列;
|
-- 作者:大红袍
-- 发布时间:2016/2/19 10:55:00
--
你例子什么也没有。
请做一个有数据例子,同时,做一个生成的效果。
|
-- 作者:漂亮美眉vszh
-- 发布时间:2016/2/19 14:41:00
--
以下是引用大红袍在2016/2/19 10:55:00的发言:
你例子什么也没有。
请做一个有数据例子,同时,做一个生成的效果。
此主题相关图片如下:1.png

此主题相关图片如下:2.png

需求就是查找符合条件的列,重新生成一个表,可以是临时表
1.找批号列Xbar的行中,连续2个出现(未知数,也有可能是 连续3个)大于0.56的列数据;
----这里只有‘样5’列和‘样6’列符合条件
麻烦了红袍老师~~2楼是我自己想出来的代码,用的是隐藏列,可是没能实现目标~~
|
-- 作者:大红袍
-- 发布时间:2016/2/20 0:49:00
--
Dim dtb As New DataTableBuilder("统计") dtb.AddDef("编号", Gettype(String), 32) dtb.AddDef("批次", Gettype(String), 32)
Dim idx As Integer = 1 Dim count As Integer = 0 Dim dt As DataTable = DataTables("数据源") Dim fdr As DataRow = dt.Find("批次 = \'Xbar\'") For i As Integer = 1 To 25 If val(fdr("样" & i)) > 0.56 Then count += 1 Else If count >= 2 Then For j As Integer= idx To i-1 dtb.AddDef("样" & j, Gettype(String)) Next End If idx = i+1 count = 0 End If Next dtb.Build()
For i As Integer = 0 To dt.DataRows.Count-4 If dt.DataRows(i).isnull("样1") = False Then Dim dr As DataRow = DataTables("统计").AddNew For Each dc As DataCol In DataTables("统计").datacols dr(dc.name) = dt.DataRows(i)(dc.name) Next End If Next
MainTable= Tables("统计")
|