以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]求助 这段代码的优化写法!!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=19698)

--  作者:gaoyong30000
--  发布时间:2012/5/18 12:46:00
--  [求助]求助 这段代码的优化写法!!

Dim cnt As Integer
Dim lj As Boolean = False
Dim str As String = "详|调|合|离|员|离职时间|备注|系统密码|系统开启|系统在线与否|空白单元格|信息完整率"
Dim Values() As String
Values = Str.split("|")
For Each cl As DataCol In dt.datacols
    lj = False
    For Index As Integer = 0 To Values.Length - 1
        If Values(Index) = cl.name Then
            lj = True
        End If
    Next
    If lj = False Then
        cnt = cnt  +  dt.Compute("Count([_identify])", cl.Name & " Is not NULL ")
    End If
Next

 

 

之前想这样写的 但是出错
Dim str As String = "详|调|合|离|员|离职时间|备注|系统密码|系统开启|系统在线与否|空白单元格|信息完整率"
For Each cl As DataCol In dt.datacols
    If cl.name not In str.Split("|") Then
        cnt = cnt  +  dt.Compute("Count([_identify])", cl.Name & " Is not NULL ")
    End If
Next

 

 


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

 

 

 

最原始的代码 判断太累了

 

Dim cnt As Integer
For Each cl As DataCol In dt.datacols
If cl.name <> "详" And cl.name <> "调" And cl.name <> "合" And cl.name <> "离" And cl.name <> "员" And cl.name <> "离职时间" And cl.name <> "备注" And cl.name <> "系统密码" And cl.name <> "系统开启" And cl.name <> "系统在线与否" And cl.name <> "空白单元格"  And cl.name <> "信息完整率"  Then
  cnt = cnt  +  dt.Compute("Count([_identify])", cl.Name & " Is not NULL ")
 End If
Next

[此贴子已经被作者于2012-5-18 12:55:49编辑过]

--  作者:FoxMan
--  发布时间:2012/5/18 13:13:00
--  
Dim s1,s2,s3 As String
s1 = "详|调|合|离|员|离职时间|备注|系统密码|系统开启"
s1+ = "|系统在线与否|空白单元格|信息完整率"
s2 = "Count([_identify])"
For Each cl As DataCol In dt.datacols
    If s1.
Contains(cl.name) = False Then
         s3 = cl.Name & " Is not NULL"
         cnt+ =  dt.Compute(s2, s3)
    End If
Next
[此贴子已经被作者于2012-5-18 13:18:02编辑过]

--  作者:gaoyong30000
--  发布时间:2012/5/18 13:24:00
--  

s1+???

cnt+ ???  什么原理?


--  作者:FoxMan
--  发布时间:2012/5/18 13:27:00
--  
疊加
--  作者:gaoyong30000
--  发布时间:2012/5/18 13:28:00
--  

foxman  还有一点

 

s1.Contains  直接包含的话 例如:我上面的  |离|  如果去掉后 再判断  是否包含离      还是为true   因为 我还有个 |离职时间|  也包含离

 

最好是分开 然后contains

 

请问该怎么优化下?


--  作者:gaoyong30000
--  发布时间:2012/5/18 13:36:00
--  

Dim cnt As Integer
Dim s1 As String
Dim s2 As New List(of String)
s1 = "详|调|合|离|员|离职时间|备注|系统密码|系统开启|系统在线与否|空白单元格|信息完整率"
s2.AddRange(s1.Split("|"))
For Each cl As DataCol In dt.datacols
    If s2.Contains(cl.name) Then
         cnt+ =  dt.Compute("Count([_identify])", cl.Name & " Is not NULL")
    End If
Next

 

借鉴了foxman一下  集合里有contains方法~    各位看看还能否再优化!


--  作者:FoxMan
--  发布时间:2012/5/18 13:36:00
--  
Dim s1,s2,s3 As String
s1 = "|详|调|合|离|员|离职时间|备注|系统密码|系统开启"
s1+ = "|系统在线与否|空白单元格|信息完整率|"
s2 = "Count([_identify])"
For Each cl As DataCol In dt.datacols
    If s1.
Contains("|" & cl.name & "|") = False Then
         s3 = cl.Name & " Is not NULL"
         cnt+ =  dt.Compute(s2, s3)
    End If
Next

--  作者:gaoyong30000
--  发布时间:2012/5/18 13:40:00
--  

多谢  呵呵~!~~~~~~~  学到了不少图片点击可在新窗口打开查看


--  作者:blackzhu
--  发布时间:2012/5/18 13:48:00
--  
呵呵,代码无所不能.