以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何实现筛选临近坐标?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=132931)

--  作者:jj5864810
--  发布时间:2019/4/2 15:01:00
--  [求助]如何实现筛选临近坐标?
纯新手,求问怎么筛选列里面的临近坐标,比如满足 (x±50 或者y±50) 则筛选出来
--  作者:有点甜
--  发布时间:2019/4/2 15:05:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/1647.htm

 

http://www.foxtable.com/webhelp/scr/0448.htm

 

具体问题,上传实例说明。


--  作者:客人
--  发布时间:2019/4/2 15:48:00
--  
我有一列全是坐标的,不会上传图片,我复制过来吧
  坐标
(365,455)
(25,155)
(355,225)
(175,65)
(205,225)
(265,285)
(135,185)
(225,425)
(95,255)
(455,145)
(85,135)
(375,345)
(205,45)
(325,245)
(445,155)
(415,285)
(285,245)
(475,75)
(345,195)
(275,345)
(145,225)
(255,335)
(385,195)
(375,175)
(375,185)
(255,465)
(135,175)
(125,175)
(165,75)
  那列是这样的,求问能不能实现:比如我输入个基础坐标(200,200),然后根据列里面的坐标距离我输入这个的坐标的距离来筛选出临近的20个


--  作者:有点甜
--  发布时间:2019/4/2 16:26:00
--  

参考代码

 

Dim t As Table = Tables("表A")
Dim x = 200
Dim y = 200
Dim c = 5
Dim drs = t.DataTable.Select("")
Dim ary1(drs.count-1) As Integer
Dim ary3(drs.count-1) As Double
For i As Integer = 0 To drs.count-1
    Dim dr As DataRow = drs(i)
    ary1(i) = dr("_Identify")
    Dim s = dr("第一列")
    s = s.replace("(", "").replace(")", "")
    Dim ary = s.split(",")
    If ary.length = 2 Then
        ary3(i) = Math.Sqrt((x-ary(0))^2+(y-ary(1))^2)
    Else
        ary3(i) = Math.Sqrt((x)^2+(y)^2)
    End If
Next
array.sort(ary3, ary1)
Dim str As String = ""
For i As Integer = 1 To c
    str &= ary1(i-1) & ","
Next
t.filter = "_Identify in (" & str.trim(",") & ")"


--  作者:jj5864810
--  发布时间:2019/4/2 17:04:00
--  
谢谢老师,感觉还是太深奥,您这代码是用在哪里的我都不知道,我还是去学习下吧
--  作者:有点甜
--  发布时间:2019/4/2 17:39:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/0213.htm

 


--  作者:jj5864810
--  发布时间:2019/4/2 21:02:00
--  
慢慢摸索已经有点起色了,但是还有两个问题想麻烦下.
1:按您给的参考代码,我代入执行筛选后,想改个基础坐标再次筛选,没反应,应该是筛选后那列只剩下20个了,换坐标筛选还是那20个,要怎样才能在原来的列里面重新筛选?

2:想把筛选出来的结果由近到远排序,需要怎样做?麻烦了老师

--  作者:jj5864810
--  发布时间:2019/4/2 21:17:00
--  
刚又试了下,第一个问题没事,重新筛选是可以筛选出来的,现在主要是第二个按距离排序的问题,不知道从哪里下手
--  作者:有点蓝
--  发布时间:2019/4/2 21:18:00
--  
取消之前的筛选:
 Tables("表A").filter = “”

如果要排序需要增加一个辅助序号列。

……
Next
Dim dict As new Dictionary(of Integer,Integer)
array.sort(ary3, ary1)
Dim str As String = ""
For i As Integer = 1 To c
    dict.Add(ary1(i-1),i)
    str &= ary1(i-1) & ","
Next
t.filter = "_Identify in (" & str.trim(",") & ")"
For Each r As Row In t.Rows
    r("序号") = dict(r("_Identify"))
Next
t.sort = "序号"

--  作者:jj5864810
--  发布时间:2019/4/2 22:25:00
--  
请问要增加的辅助序号列是不是直接增加个列,然后未筛选排序前每行1 2 3 4 5~这样排下去就行了?

另外您帮添加的代码,我这样接是对的吗?就是把原先代码end if后面的替换下

Dim t As Table = Tables("表A")
Dim x = 200
Dim y = 200
Dim c = 5
Dim drs = t.DataTable.Select("")
Dim ary1(drs.count-1) As Integer
Dim ary3(drs.count-1) As Double
For i As Integer = 0 To drs.count-1
    Dim dr As DataRow = drs(i)
    ary1(i) = dr("_Identify")
    Dim s = dr("第一列")
    s = s.replace("(", "").replace(")", "")
    Dim ary = s.split(",")
    If ary.length = 2 Then
        ary3(i) = Math.Sqrt((x-ary(0))^2+(y-ary(1))^2)
    Else
        ary3(i) = Math.Sqrt((x)^2+(y)^2)
    End If
Next
Dim dict As new Dictionary(of Integer,Integer)
array.sort(ary3, ary1)
Dim str As String = ""
For i As Integer = 1 To c
    dict.Add(ary1(i-1),i)
    str &= ary1(i-1) & ","
Next
t.filter = "_Identify in (" & str.trim(",") & ")"
For Each r As Row In t.Rows
    r("序号") = dict(r("_Identify"))
Next
t.sort = "序号"