以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 检测一列的重复值,这些代码哪里有错? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=151290) |
-- 作者:ls93005 -- 发布时间:2020/6/19 15:31:00 -- 检测一列的重复值,这些代码哪里有错? 以下内容为程序代码: 1 For i As Integer = 0 To Cot 2 Dim cfList As New List (of String) 3 Dim djID = CurrentTable.Rows(i)("物资信息_单据编号") 4 If cfList.Contains(djID) = False Then 5 cfList.Add(djID) 6 Else 7 Do 8 CurrentTable.Rows(i)("物资信息_单据编号") = Rand.Next(9999) 9 If cfList.Contains(djID) = False Then 10 cfList.Add(djID) 11 End If 12 Loop While cfList.Contains(djID) = True 13 End If 14 Next 运行了没有效果
|
-- 作者:有点蓝 -- 发布时间:2020/6/19 15:35:00 -- 重新编辑一下上面的代码,不要使用代码模式发表代码,很不方便,请直接贴出代码,不要有行号 [此贴子已经被作者于2020/6/19 15:35:31编辑过]
|
-- 作者:ls93005 -- 发布时间:2020/6/19 15:38:00 -- 代码 Dim rqList As New List(of Date) Dim Cot As Integer = CurrentTable.Rows.Count - 1 For i As Integer = 0 To Cot Dim ksRQ As Date = CurrentTable.Rows(i)("项目信息_开始日期") Dim djID = CurrentTable.Rows(i)("物资信息_单据编号") If rqlist.Contains(ksRQ) = False Then rqlist.Add(ksRQ) Output.show(ksRQ) End If Next For Each d1 As Date In rqList For i As Integer = 0 To Cot If CurrentTable.Rows(i)("项目信息_开始日期") = d1 Then CurrentTable.Rows(i)("物资信息_单据编号") = Format(d1,"yyyyMMdd") & format(Rand.Next(1,99),"0000") End If Next Next For i As Integer = 0 To Cot Dim cfList As New List (of String) Dim djID = CurrentTable.Rows(i)("物资信息_单据编号") If cfList.Contains(djID) = False Then cfList.Add(djID) Else Do CurrentTable.Rows(i)("物资信息_单据编号") = Rand.Next(9999) If cfList.Contains(djID) = False Then cfList.Add(djID) End If Loop While cfList.Contains(djID) = True End If Next
|
-- 作者:有点蓝 -- 发布时间:2020/6/19 15:44:00 -- 没看懂这个代码逻辑,如果要检测某一列是否有重复,直接使用:http://www.foxtable.com/webhelp/topics/2712.htm 如果要是不重复编号,直接编号+1即可,干嘛要使用Rand.Next。或者看看:http://www.foxtable.com/webhelp/topics/2403.htm
|
-- 作者:ls93005 -- 发布时间:2020/6/19 16:02:00 -- 那一列必须是一个0-100的随机值 那一列必须是一个1-99的随机值,而不能是顺序+1... 每个日期下,djID的值必须是一个1-99的随机值,且不能重复。
[此贴子已经被作者于2020/6/19 16:03:13编辑过]
|
-- 作者:ls93005 -- 发布时间:2020/6/19 16:09:00 -- 或者说我想实现这样: 或者说我想实现这样:这一列根据日期生成1-99的不重复的值,要如何写?? |
-- 作者:有点蓝 -- 发布时间:2020/6/19 16:14:00 -- 添加一个临时列“序号”,然后随机给序号列赋值,再按照序号列排序,这样行顺序基本上就是随机的了,再按照序号列排序后的行顺序+1生成编号即可 |
-- 作者:ls93005 -- 发布时间:2020/6/19 16:27:00 -- 那么我这个去重复值得办法可以实现吗? 就是把随机生成的string加入集合。并用Contains检测。如果检测到没有重复的,就加入集合。如果检测到重复的,就重新生成一次。直至和集合内的值没有重复的。 For i As Integer = 0 To Cot Dim cfList As New List (of String) Dim djID = CurrentTable.Rows(i)("物资信息_单据编号") If cfList.Contains(djID) = False Then cfList.Add(djID) Else Do CurrentTable.Rows(i)("物资信息_单据编号") = Rand.Next(9999) If cfList.Contains(djID) = False Then cfList.Add(djID) End If Loop While cfList.Contains(djID) = True End If Next |
-- 作者:ls93005 -- 发布时间:2020/6/19 16:41:00 -- 老师 在吗 |
-- 作者:有点蓝 -- 发布时间:2020/6/19 16:45:00 -- Dim cfList As New List (of String) For i As Integer = 0 To Cot Dim djID = CurrentTable.Rows(i)("物资信息_单据编号") If cfList.Contains(djID) = False Then cfList.Add(djID) Else Do While true CurrentTable.Rows(i)("物资信息_单据编号") = Rand.Next(9999) If cfList.Contains(djID) = False Then cfList.Add(djID) exit do End If Loop End If Next |