以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 同列中不同行的差 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=158186) |
-- 作者:莫名的精彩 -- 发布时间:2020/11/10 21:06:00 -- 同列中不同行的差 第二列和第三列为原有数据,查找出第三列中行与行之间差相等的数据(行间隔相同),提取到第五列,相应的第二列提取到第四列,如图: |
-- 作者:有点蓝 -- 发布时间:2020/11/10 21:24:00 -- 没看懂【第三列中行与行之间差相等的数据(行间隔相同)】是什么意思,以上面数据为例说明一下 |
-- 作者:莫名的精彩 -- 发布时间:2020/11/10 22:00:00 -- 第三列数据中有两组数据相减的差刚好是11,并且相隔的行数相同,即是12与23,11与22,然后提取出来,对应第二列中的数据也提取出来。 怎样通过代码查找出类似的数据,并提取出来。
|
-- 作者:有点蓝 -- 发布时间:2020/11/10 22:36:00 -- Dim t As Table = Tables("表A") Dim c As Integer = t.Rows.Count - 1 Dim dict As new Dictionary(of Integer,List(of Integer)) Dim idx As Integer = 0 For i As Integer = 1 To c dict.Clear For k As Integer = 0 To c If k + i < c Dim d As Integer = t.Rows(k+i)("第三列") - t.Rows(k)("第三列") If d > 0 If dict.ContainsKey(d) Then dict(d).add(k) dict(d).add(k+i) Else Dim lst As new List(of Integer) lst.add(k) lst.add(k+i) dict.Add(d,lst) End If End If End If Next For Each key As Integer In dict.Keys If dict(key).count > 2 Then Output.Show(key & "-----") For Each m As Integer In dict(key) Output.Show(m) Dim r As Row = t.Rows(idx) Dim r2 As Row = t.Rows(m) r("第四列") = r2("第二列") r("第五列") = r2("第三列") idx += 1 Next End If Next Next
|
-- 作者:莫名的精彩 -- 发布时间:2020/11/11 21:14:00 -- 原来的减号改为加号为什么不行? Dim t
As Table = Tables("表A") Dim c
As Integer =
t.Rows.Count - 1 Dim dict
As new Dictionary(of Integer,List(of Integer)) Dim idx
As Integer =
0 For i
As Integer =
1 To c dict.Clear For k As Integer = 0 To c If k + i < c Dim d As Integer = t.Rows(k+i)("第三列") + t.Rows(k)("第三列") \'为什么改为加号就不行呢? If d > 0
If dict.ContainsKey(d) Then
dict(d).add(k)
dict(d).add(k+i) Else
Dim lst
As new List(of Integer)
lst.add(k)
lst.add(k+i)
dict.Add(d,lst)
End If End If End If Next For Each key As Integer In dict.Keys If dict(key).count > 2 Then Output.Show("= " &
key ) For Each m As Integer In dict(key)
\'
Output.Show(m) Dim r As Row = Tables("表b").AddNew() \' r = t.Rows(idx) \'Dim r As Row =
t.Rows(idx)
Dim r2 As Row = t.Rows(m)
r("第四列")
= r2("第二列")
r("第五列")
= r2("第三列")
idx += 1 Next End If Next Next [此贴子已经被作者于2020/11/12 14:49:06编辑过]
|
-- 作者:莫名的精彩 -- 发布时间:2020/11/12 14:51:00 -- 应该怎么改 |
-- 作者:有点蓝 -- 发布时间:2020/11/12 15:17:00 -- 我测试没有问题。 我大概解释一下算法,如果看得懂自行学习一下,如果看不懂,我也没办法了, Dim t As Table = Tables("表A") Dim c As Integer = t.Rows.Count - 1 Dim dict As new Dictionary(of Integer,List(of Integer)) Dim idx As Integer = 0 For i As Integer = 1 To c 按间隔遍历,比如间隔1,就是第2行减第1行、第3行减第2行...;比如比如间隔2,就是第3行减第1行、第4行减第2行...;以此类推 dict.Clear For k As Integer = 0 To c \'从第一行开始遍历每种间隔的差值 If k + i < c ‘k+i就是间隔的行,比如间隔i=2,k=0的时候表示第一行,那么k+i=0+2=2就表示是第3行。。。 Dim d As Integer = t.Rows(k+i)("第三列") - t.Rows(k)("第三列") ’按上面的说法,间隔i=2,k=0的时候,这一句就表示第3行第三列减去第1行第三列的值, If d > 0如果差值大于0 If dict.ContainsKey(d) Then 如果已经记录过这个差值,添加到字典集合中 dict(d).add(k) dict(d).add(k+i) Else Dim lst As new List(of Integer) 如果没有记录过这个差值,新增集合添加到字典中 lst.add(k) lst.add(k+i) dict.Add(d,lst) End If End If End If Next 一种间隔遍历完毕 For Each key As Integer In dict.Keys If dict(key).count > 2 Then 判断这个间隔的行中是否有超过2行的差值是一样的 Output.Show(key & "-----") For Each m As Integer In dict(key) Output.Show(m) 如果有超过2行的差值是一样的,显示这些行的行号 Dim r As Row = t.Rows(idx) Dim r2 As Row = t.Rows(m) r("第四列") = r2("第二列") r("第五列") = r2("第三列") idx += 1 Next End If Next Next
|
-- 作者:莫名的精彩 -- 发布时间:2020/11/12 20:17:00 -- 谢谢,原来是原数据为字符串不行,改为整数了就行了。 |
-- 作者:莫名的精彩 -- 发布时间:2020/11/12 22:57:00 -- 修改的是红色部分,把两个数相加改为三个数相加,但找不到相隔一行的数据(相隔一行有符合的数据),结果是从相隔两行开始找。 Dim t As Table = Tables("表A") Dim c As Integer = t.Rows.Count - 1 Dim dict As new Dictionary(of Integer,List(of Integer)) Dim idx As Integer = 0 For i As Integer = 1 To c For p As Integer = 1 To c dict.Clear For k As Integer = 0 To c If k + i + p <= c Dim d As Integer = t.Rows(k+i+p)("第三列") + t.Rows(k+i)("第三列") + t.Rows(k)("第三列") \'改为三个数相加,相隔一行的数据找不出。 If d > 0 If dict.ContainsKey(d) Then dict(d).add(k) dict(d).add(k+i) dict(d).add(k+i+p) Else Dim lst As new List(of Integer) lst.add(k) lst.add(k+i) lst.add(i+k+p) dict.Add(d,lst) End If End If End If Next For Each key As Integer In dict.Keys If dict(key).count > 3 Then Output.Show("= " & key ) For Each m As Integer In dict(key) Output.Show(m) Dim r As Row = Tables("表b").AddNew() \' r = t.Rows(idx) \'Dim r As Row = t.Rows(idx) Dim r2 As Row = t.Rows(m) r("第四列") = r2("第二列") r("第五列") = r2("第三列") idx += 1 Next End If Next Next Next
|
-- 作者:有点蓝 -- 发布时间:2020/11/12 23:19:00 -- 试试 Dim t As Table = Tables("表A") Dim c As Integer = t.Rows.Count - 1 Dim dict As new Dictionary(of Integer,List(of Integer)) Dim idx As Integer = 0 For i As Integer = 1 To c dict.Clear For k As Integer = 0 To c If k + i + i <= c Dim d As Integer = t.Rows(k+i+i)("第三列") + t.Rows(k+i)("第三列") + t.Rows(k)("第三列") \'改为三个数相加,相隔一行的数据找不出。 If d > 0 |