Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
弄了个数据统计程序,请老师们看一下能否优化?谢谢!
Dim s As Date = Date.Now()
Dim t As New DataTableBuilder("temp") '创建临时表
t.AddDef("字符", GetType(String), 32)
t.TableVisible = false
t.Build()
DataTables("统计").DataRows.Clear()
for Each dc as Datacol in DataTables("自由统计数据二").Datacols
if dc.name <> "数据1" Then
if dc.name <> "数据2" Then
if dc.name <> "数据3" Then
if dc.name <> "数据4" Then
if dc.name <> "数据5" Then
if dc.name <> "数据6" Then
if dc.name <> "数据7" Then
if dc.name <> "数据8" Then
if dc.name <> "数据9" Then
if dc.name <> "数据10" Then
dim f As New Filler
f.SourceTable = DataTables("自由统计数据二") '指定数据来源
f.SourceCols = dc.name '指定数据来源列
f.DataTable = DataTables("temp") '指定数据接收表
f.DataCols = "字符" '指定数据接收列
f.Distinct = false
f.Fill() '填充数据
end if
end if
end if
end if
end if
end if
end if
end if
end if
end if
Next
DataTables("temp").DeleteFor("[字符] Is Null") '删除临时表空行
dim f1 As New Filler
f1.SourceTable = DataTables("temp") '指定数据来源
f1.DataTable = DataTables("统计") '指定数据接收表
f1.ExcludeNullValue = true
f1.Fill() '填充数据
For Each dr As DataRow In DataTables("统计").DataRows
dr("出现次数") = DataTables("自由统计数据二").Compute("sum(数据1)", "姓名1 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据2)", "姓名2 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据3)", "姓名3 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据4)", "姓名4 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据5)", "姓名5 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据6)", "姓名6 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据7)", "姓名7 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据8)", "姓名8 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据9)", "姓名9 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据10)", "姓名10 = '" & dr("字符") & "'")
Next
Messagebox.Show("处理完毕! 耗时: " & (Date.Now -s).TotalSeconds)
下载信息 [文件大小: 下载次数: ] | |
点击浏览该文件:900000.rar |
Dim s As Date = Date.Now()
Dim t As New DataTableBuilder("temp") '创建临时表
t.AddDef("字符", GetType(String), 32)
t.TableVisible = false
t.Build()
DataTables("统计").DataRows.Clear()
For i As integer = 1 to 10
dim f As New Filler
f.SourceTable = DataTables("自由统计数据二") '指定数据来源
f.SourceCols = "姓名" & i '指定数据来源列
f.DataTable = DataTables("temp") '指定数据接收表
f.DataCols = "字符" '指定数据接收列
f.Distinct = false
f.Fill() '填充数据
Next
dim f1 As New Filler
f1.SourceTable = DataTables("temp") '指定数据来源
f1.DataTable = DataTables("统计") '指定数据接收表
f1.ExcludeNullValue = true
f1.Fill() '填充数据
For Each dr As DataRow In DataTables("统计").DataRows
Dim sum As Integer = 0
For i As integer = 1 to 10
sum = sum + DataTables("自由统计数据二").Compute("sum(数据" & i & ")", "姓名" & i & " = '" & dr("字符") & "'")
dr("出现次数") = sum
Next
Next
Messagebox.Show("处理完毕! 耗时: " & (Date.Now -s).TotalSeconds)
又是凌晨.........,代码越来越精悍,深入比较学习中.......
学习4楼文件体会:
一、填充问题
这种填充方式(适合于排除少量列、列名无规律使用):
for Each dc as Datacol in DataTables("自由统计数据二").Datacols
if dc.name <> "数据1" Then
if dc.name <> "数据2" Then
if dc.name <> "数据3" Then
...........
end if
end if
end if
end if
Next
与以下代码等效:
For i As integer = 1 to 10
dim f As New Filler
f.SourceTable = DataTables("自由统计数据二") '指定数据来源
f.SourceCols = "姓名" & i '指定数据来源列
f.DataTable = DataTables("temp") '指定数据接收表
f.DataCols = "字符" '指定数据接收列
f.Distinct = false
f.Fill() '填充数据
Next
或与以下代码等效:
dim f As New Filler
f.SourceTable = DataTables("自由统计数据二") '指定数据来源
f.SourceCols = "姓名1,姓名2,姓名3,姓名4,姓名5,姓名6,姓名7,姓名8,姓名9,姓名10"
f.DataTable = DataTables("temp") '指定数据接收表
f.DataCols = "字符" '指定数据接收列
f.Distinct = false
f.Fill() '填充数据
三种方案第2种最佳.
二、流程控制语句的转换
原句:
For Each dr As DataRow In DataTables("统计").DataRows
dr("出现次数") = DataTables("自由统计数据二").Compute("sum(数据1)", "姓名1 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据2)", "姓名2 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据3)", "姓名3 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据4)", "姓名4 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据5)", "姓名5 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据6)", "姓名6 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据7)", "姓名7 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据8)", "姓名8 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据9)", "姓名9 = '" & dr("字符") & "'")+DataTables("自由统计数据二").Compute("sum(数据10)", "姓名10 = '" & dr("字符") & "'")
Next
精简句:
Dim sum As Integer = 0
For i As integer = 1 to 10
sum = sum + DataTables("自由统计数据二").Compute("sum(数据" & i & ")", "姓名" & i & " = '" & dr("字符") & "'")
dr("出现次数") = sum
Next
第1次见到for….next在实际中运用,sum(数据" & i & ")和姓名" & i &大大精简代码。
注意:for….next与for each语句的转换。
6楼下列语句难理解,请老师指点一下:
f.SourceCols = "姓名" & i & "," & "数据" & i
我的理解不知对否:
数据1、数据2、数据3。。。。。。通过for…..next语句可表示为:
数据" & i & "
填充来源列常规用法为:f.SourceCols = "姓名1,数据1"
按常规用法应改为:f.SourceCols = "姓名" & i & ",数据" & i & "",而C老师在6楼用法是:f.SourceCols = "姓名" & i & "," & "数据" & i