Foxtable(狐表)用户栏目专家坐堂 → 请教


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

主题:请教

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/5 14:22:00 [显示全部帖子]

Dim lst As new List(of Long)
Dim i As Long = 0
Dim p2 As String = "^[0,2]+$"
Dim r As New System.Text.RegularExpressions.Regex(p2)

Do While lst.Count < 2020
    If r.IsMatch(i) Then lst.Add(i)
    i += 1
Loop
For Each s As Long In lst
    Output.Show(s)
Next

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/6 10:12:00 [显示全部帖子]

首先这种代码不适合在表事件里使用,建议使用按钮处理。其次数据多循环比较久,要等。

找到规律改一下,可以提高n倍速度

Dim d As Date = Date.Now
Dim lst As new List(of Long)
Dim i As Long = 0
Dim p1 As String = "0$"
Dim p2 As String = "^[0,2]+$"
Dim p3 As String = "^2+$"
Dim p4 As String = "0[2]+$"
Dim r As New System.Text.RegularExpressions.Regex(p2)

Do While lst.Count < 500
    Dim i2 As String= i.Tostring
    Dim k As Long = i2.length
    If r.IsMatch(i2,p2) Then
        lst.Add(i)
        If r.IsMatch(i2,p1) Then
            i += 2
        ElseIf r.IsMatch(i2,p4) Then
            Dim s2 As String = System.Text.RegularExpressions.Regex.replace(i2,p4,"")
            i=clng(s2 & "2".PadRight(k-s2.Length,"0"))
        ElseIf r.IsMatch(i2,p3) Then
            i=cint("2".PadRight(k+1,"0"))
        Else
            i += 18
        End If
    Else
        i += 2
    End If
Loop
Dim t As TimeSpan = Date.Now - d
Output.Show(t.TotalSeconds)

For Each s As Long In lst
    Output.Show(s)
Next

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/6 11:52:00 [显示全部帖子]

我的代码只是输出到Output.Show里,如果要保存到表请先看懂代码自己改改。d变量是为了测试代码执行的速度的,不需要可以去掉。还是那句话,先看懂代码再说。

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/7 11:34:00 [显示全部帖子]

多看看基础的内容:http://www.foxtable.com/webhelp/topics/1592.htm

Dim dr As DataRow
For Each s As Long In lst
    'Output.Show(s)
    dr = DataTables("表A").AddNew
    dr("鼠数") = s
Next

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/7 12:13:00 [显示全部帖子]

看8楼

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/7 14:23:00 [显示全部帖子]

i=cint("2".PadRight(k+1,"0"))

改为

i=clng("2".PadRight(k+1,"0"))

如果在已经有的行里填充,参考

DataTables("表A").StopRedraw
Dim dr As DataRow
For i As Integer = 0 To lst.Count - 1
    dr = DataTables("表A").DataRows(i)
    dr("第一列") = s
Next
DataTables("表A").ResumeRedraw


 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/7 17:22:00 [显示全部帖子]

DataTables("表A").StopRedraw
Dim dr As DataRow
For i As Integer = 0 To lst.Count - 1
    If i < DataTables("表A").DataRows.Count
        dr = DataTables("表A").DataRows(i)
    Else
        dr = DataTables("表A").AddNew
    End If
    dr("第一列") = s
Next
DataTables("表A").ResumeRedraw

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/7 17:44:00 [显示全部帖子]

'Dim d As Long
Dim lst As new List(of Long)
Dim i As Long = 0
Dim p1 As String = "0$"
Dim p2 As String = "^[0,2]+$"
Dim p3 As String = "^2+$"
Dim p4 As String = "0[2]+$"
Dim r As New System.Text.RegularExpressions.Regex(p2)

Do While lst.Count < 2020
    Dim i2 As String= i.Tostring
    Dim k As Long = i2.length
    If r.IsMatch(i2,p2) Then
        lst.Add(i)
        If r.IsMatch(i2,p1) Then
            i += 2
        ElseIf r.IsMatch(i2,p4) Then
            Dim s2 As String = System.Text.RegularExpressions.Regex.replace(i2,p4,"")
            i=clng(s2 & "2".PadRight(k-s2.Length,"0"))
        ElseIf r.IsMatch(i2,p3) Then
            i=clng("2".PadRight(k+1,"0"))
        Else
            i += 18
        End If
    Else
        i += 2
    End If
Loop

DataTables("表A").StopRedraw
Dim dr As DataRow
For i = 0 To lst.Count - 1
    If i < DataTables("表A").DataRows.Count
        dr = DataTables("表A").DataRows(i)
    Else
        dr = DataTables("表A").AddNew
    End If
    dr("鼠数") = lst(i)
Next
DataTables("表A").ResumeRedraw


 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/7 20:39:00 [显示全部帖子]

Dim s As new StringBuilder
For 
i As Integer = 1 To tables("表A").rows.count - 1
    s.Append(tables("表A").rows(i)("鼠数"))
Next

v = s.Tostring
Output.Show(s)

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/8 8:41:00 [显示全部帖子]

自己把数据搞得乱七八糟的,然后还不会处理

s.Append(Tables("表A").rows(i)("鼠数").
StartsWith("0").trim("."))

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