以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]老师,这个随机筛选如果实现,帮忙写下代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=193331)

--  作者:hbfnmxb
--  发布时间:2024/9/5 20:53:00
--  [求助]老师,这个随机筛选如果实现,帮忙写下代码
无法插入图片?图片如何插入?

这个代码如下:但不能实现我想要的,老师帮忙写下代码:
有一个FS控件、有一个CFS控件、有一个WFS控件、还有一个BDF控件,筛选的分数区间是:第一个区间,小于FS+CFS,大于FS,第二个分数区间 ,小于FS,大于FS-WFS,第三个分数区间是,小于FS-WFS,大于FS-BDF。这三个分数区间分别设定具体个数,第一个分数区间设定的个数是:CSL控件中的个数,第二个分数区间是:WSL控件中的个数,第三个分数区间是BSL控件中的个数,这段代码如何来写,老师帮忙写一下,非常感谢!

e.Form.Controls("Label6").Text = "正在进行专业筛选,请稍后..."
Application.DoEvents()
Dim timestart, timeend As Date
timestart = Date.now

Dim drs As List(Of DataRow)
drs = DataTables("基础数据").Select("[确定导入] = True")
For Each dr As DataRow In drs
    dr("确定导入") = False
Next

Dim Filter As String
If e.Form.Controls("选择历史").Checked = True Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "首选科目 = \'历史\'"
End If
If e.Form.Controls("选择物理").Checked = True Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "首选科目 = \'物理\'"
End If

Dim s As String = e.Form.Controls("CheckedComboBox1").Text
 \'考生选科数组
\'s=s.replace("物理","").replace("历史","").replace(",,",",").trim(",")  \'只剩下再选科目
\'Output.Show(s)
Dim Xks() As String \'考生选科集合
Xks = s.split(",")
Dim Jhxks As List(Of String) \'招生计划中的选科
Jhxks = DataTables("基础数据").GetValues("次选科目")
Dim Xkmys As New List(Of String) \'与我的选科匹配的选科集合
Xkmys.Add("不限")
Xkmys.Add(Xks(0) & "和" & Xks(1))
Xkmys.Add(Xks(1) & "和" & Xks(0))
\'\'单科加"或"
For Index As Integer = 0 To Xks.Length - 1 \'提示错误的位置在这里!
    For Each Product As String In Jhxks
        If (Product.contains(Xks(Index) & "或") Or Product.contains("或" & Xks(Index)) Or Product = Xks(Index)) And Xkmys.Contains(Product) = False Then
            \'filter=filter & "\'" & Product & "\'"
            \'Jhxks.Remove(Product)
            Xkmys.Add(Product)
        End If
    Next
Next
\'加组合,手动填加,
\'开始生成筛选条件
Dim tj As String
For Each filter2 As String In Xkmys
    tj = tj & "\'" & filter2 & "\',"
Next
tj = "[次选科目] In (" & tj.trim(",") & ")"
Tables("基础数据").Filter = tj
output.Show(tj)

If e.Form.Controls("FS+CGF").text > "" Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "预估分 <= " & e.Form.Controls("FS+CGF").text
End If

If e.Form.Controls("FS").text > "" Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "预估分 >= " & e.Form.Controls("FS").text
End If


If e.Form.Controls("FS").text > "" Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "预估分 <= " & e.Form.Controls("FS").text
End If

If e.Form.Controls("FS-WFS").text > "" Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "预估分 >= " & e.Form.Controls("FS-WFS").text
End If


If e.Form.Controls("FS-WFS").text > "" Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "预估分 <= " & e.Form.Controls("FS-WFS").text
End If

If e.Form.Controls("FS-BDF").text > "" Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "预估分 >= " & e.Form.Controls("FS-BDF").text
End If

If Filter > "" Then
If tj > "" Then 
Filter = Filter & " and " & tj
End If
    Tables("基础数据").Filter = Filter
End If

Tables("基础数据").Sort = "预估分 DESC" \'按"低分等效"列降序排列

e.Form.Controls("Label6").Text = "专业筛选完毕!."
timeend = Date.now
e.Form.Controls("Label6").text = "耗时" & (timeend - timestart).TotalSeconds & "秒"
Messagebox.show("按专业【预估分】分,筛选出符合条件的行,共" & (Tables("基础数据").rows.count) & "行", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
MainTable = Tables("基础数据")


[此贴子已经被作者于2024/9/5 21:04:19编辑过]

--  作者:有点蓝
--  发布时间:2024/9/5 21:58:00
--  
请上传实例测试


--  作者:hbfnmxb
--  发布时间:2024/9/6 18:16:00
--  
附件大,压缩分开了。删除了历史数据,测试的时候,只能用物理数据了。谢谢老师

[此贴子已经被作者于2024/9/8 23:22:07编辑过]

--  作者:hbfnmxb
--  发布时间:2024/9/8 15:49:00
--  
老师,帮忙看一下!这个代码如何写


--  作者:有点蓝
--  发布时间:2024/9/8 16:32:00
--  
举例说明一下,怎么测试,输入什么条件?什么地方有问题?什么结果才是正确的?
--  作者:hbfnmxb
--  发布时间:2024/9/8 19:37:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:001.png
图片点击可在新窗口打开查看
图片点击可在新窗口打开查看此主题相关图片如下:002.png
图片点击可在新窗口打开查看

1首选科目,选择历史或物理,考生选科选择至少选择两个学科
2.随机筛选出96个,这96条,包含冲、稳、保,其中前36个为冲[CSL]控件中的个数,稳为40个从第37个开始,到76个也就是插件[WSL]中的个数,保为20条,从第77开始到96,也就是控件[BSL]中的个数。
3.分数区间:冲的最高分是“考生分数+冲的分数,也就是[FS+CGF]两个控件之和,冲的最低分是考生分数,即[FS]控件;稳的分数区间,稳的最高分就是考生分数,即[FS],稳的最低分为[FS-WFS]控件之差;保的分数区间:保的最高分为[FS-WFS]之差,保的最低分为,考生分数减去保的分数,也就是[FS-BDF]的控件之差;
4筛选的表是:基础数据表,筛选的列是:预估分
5举例:如考生的分数是560分,要在基础数据表随机筛选出:
条件A:预估分<560+10、预估分>=560,36条(这是冲的)
条件B:预估分<560、预估分>=560-20,40条(这是稳的)
条件C:预估分<560-20、预估分>=560-30,20条(这是保的)
这三个条件加到一起正好是96条


--  作者:pyh6918
--  发布时间:2024/9/8 20:57:00
--  
做的是哪个省的高报数据?

给你提供个思路,看是否可行.
1.加一逻辑列"已选",先将[基础数据]表"已选"列全部置False.
2.冲,筛选出符合冲的数据,可随机或按预估分在"已选"列勾选冲的数量
3.稳.筛选出符合的数据,可随机或按预估分在"已选"列勾选的数量
4.保.筛选出符合的数据,可随机或按预估分在"已选"列勾选的数量
5.加载全部"已选"

还可使用四种"冲稳保垫"

--  作者:有点蓝
--  发布时间:2024/9/8 21:29:00
--  
建议按7楼说的,增加一个逻辑列。

然后分3次处理,比如先筛选树符合冲,并且未勾选的数据,然后在筛选结果随机挑选参考:http://www.foxtable.com/webhelp/topics/2963.htm。

接着按同样的方式筛选处理稳、保


--  作者:hbfnmxb
--  发布时间:2024/9/9 10:32:00
--  
也就是说,冲筛选一次、稳筛选一次、保筛选一次,然后三次的筛选结果加到一起?是这意思吧


--  作者:有点蓝
--  发布时间:2024/9/9 10:37:00
--  
不是

冲筛选一次,然后选出需要的结果比如36个;接着稳筛选一次,选出需要的结果比如40个;接着保筛选一次,选出需要的结果比如20个;