Foxtable(狐表)用户栏目专家坐堂 → 同列中不同行的差


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

主题:同列中不同行的差

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


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
同列中不同行的差  发帖心情 Post By:2020/11/10 21:06:00 [显示全部帖子]

第二列和第三列为原有数据,查找出第三列中行与行之间差相等的数据(行间隔相同),提取到第五列,相应的第二列提取到第四列,如图:

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


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


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By:2020/11/10 22:00:00 [显示全部帖子]

第三列数据中有两组数据相减的差刚好是11,并且相隔的行数相同,即是12与23,11与22,然后提取出来,对应第二列中的数据也提取出来。
怎样通过代码查找出类似的数据,并提取出来。

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


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By: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 + ic

            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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
莫名的精彩
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By:2020/11/12 14:51:00 [显示全部帖子]

应该怎么改

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


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By:2020/11/12 20:17:00 [显示全部帖子]

谢谢,原来是原数据为字符串不行,改为整数了就行了。

 回到顶部
帅哥哟,离线,有人找我吗?
莫名的精彩
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By: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

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


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By:2020/11/13 22:18:00 [显示全部帖子]

之前就试过了,不行。

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


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By:2020/11/15 9:46:00 [显示全部帖子]

都有改了,不行。就是查找不到相差一行的数据,是从相差两行开始查找。

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


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By:2020/11/15 9:53:00 [显示全部帖子]

   把P定义为从2开始,下面就正常了。
  Dim d As Integer = t.Rows(k+i)("第三列") + t.Rows(p+k)("第三列") + t.Rows(k)("第三列")  

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


加好友 发短信
等级:婴狐 帖子:19 积分:224 威望:0 精华:0 注册:2020/10/27 7:52:00
  发帖心情 Post By:2020/11/15 20:24:00 [显示全部帖子]

下面是相隔相同的行的两个数相加,提取和一样的两组或多于两组的数据。现在要改为:

提取和是等差关系的两组或多于两组的数据(等差是1时,两组就提取,如果不是1,就三组提取)

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(dThen

                    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


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