- 帖子
- 27
- 积分
- 51
- 技术
- 0
- 捐助
- 0
- 注册时间
- 2012-5-19
|
[文本处理] [已解决]批处理如何将批量文本相同数据的次数各自统计出来。
本帖最后由 a000000_82 于 2013-8-15 20:21 编辑
上月31日发贴“批处理如何将批量质检记录格式文本,统计每个文本指定字符列出现次数”,
求得一个统计批整理出多项数据,今请求各位大神再帮忙写个不同的统计批。
条件与内容如下:
“第三季检零配件汇总”文件夹内有文本数量0001.txt~9xxx.txt
如0001.txt和9xxx.txt内容为:
(0001.txt)文本内容为:
0001.txt:01,03,01,
0001.txt:05,
0001.txt:05,05,60,
0001.txt:09,
0001.txt:03,03,03,03,52
略
(9xxx.txt)文本内容为:
9xxx.txt:08,80,
9xxx.txt:12,xx,xx,xx,xx.xx,xx,xx,xx,
9xxx.txt:30,
9xxx.txt:02,
略
每个文本行数1~90不固定,数据列数不固定,单个数值为01,~90,数量不固定。(注:00,只是理论上存在)
批处理实现效果为:
将批量文本相同数据的次数各自统计出来分别写入文件夹:零配质统\xxxx.txt
如零配质统\0001.txt和零配质统\9xxx.txt内容为:
0001结果统计如下:
〖0001.00次〗:07,11,39,80,
〖0001.01次〗:09,52,60,
略
9xxx结果统计如下:
〖9xxx.00次〗:03,15,xx,xx,xx,
〖9xxx.01次〗:02,08,12,30,xx,xx,
略
批的要求说明:
1:批运行速度无要求,只为减轻工作量。
2:希望批尽量简单,以方便我这种只学会简单批的菜鸟学习、修改用于统计其它项目。
请大神帮忙,无尽感激~~~
另:在本论坛及网上找了半天,只找到两个类似的。
************************
注:下面这个只能统计单列,统计结果也是单列、次数结果是高向低(9-1)及结果没有00次。
(@gawk -vt=10000000000 "{ar[$0]++}END{l=asorti(ar,b);for(i=1;i<=l;i++) a[ar[b]+t,b];asorti(a);for(i=l;i>=1;i--) {split(a,b,SUBSEP);print b[1]%%t,b[2]}}")<第三季零配件质汇总\0001.txt >零配质统\0001.txt
************************
注:下面这个应该是彩票统计用的,试用打不开,但统计结果表达型式是我需要的类型。
VB使用Function函数统计次数...2012年01月03日 星期二 下午 8:52模块代码:
Function unique(data) '去掉数组重复
If Not IsArray(data) Then
data = Array()
End If
Dim dic, i
Set dic = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(data)
If Not dic.Exists("_" & data(i)) Then
dic.Add "_" & data(i), data(i)
End If
Next
unique = dic.Items
Set dic = Nothing
End Function
Sub Sort(ByRef arr) '数字升序排序
Dim i, j, t
For i = 0 To UBound(arr) - 1
For j = i + 1 To UBound(arr)
If arr(i) > arr(j) Then
t = arr(i)
arr(i) = arr(j)
arr(j) = t
End If
Next
Next
End Sub
Function tongji(allmastr) '统计函数
On Error Resume Next
Dim ma_arr: ma_arr = Split(allmastr, ",")
Dim manum2(50) '保存1-49对应的个数
Dim i, i2, j
For i = 0 To UBound(manum2)
manum2(i) = 0
Next
For i = 0 To UBound(ma_arr) '累加统计个数
i2 = CInt(ma_arr(i))
manum2(i2) = manum2(i2) + 1
Next
'获取次数列表
Dim numarr1(50)
For i = 1 To 49
numarr1(i) = manum2(i)
Next
'去掉重复次数
Dim numarr
numarr = unique(numarr1)
'次数从低到高排序
Sort numarr
Dim tjstr: tjstr = "结果统计如下:" & vbCrLf
For i = 1 To UBound(numarr)
Dim ci: ci = numarr(i)
Dim cistr
If ci < 10 Then
cistr = "〖0" & ci & "次〗:"
Else
cistr = "〖" & ci & "次〗:"
End If
Dim mashu: mashu = 0
For j = 1 To 49
If manum2(j) = ci Then
mashu = mashu + 1
If j < 10 Then j = "0" & j
cistr = cistr & j & ","
End If
Next
cistr = cistr & "(共" & mashu & "个)" & vbCrLf
tjstr = tjstr & cistr
Next
tongji = tjstr
End Function
Private Sub Command1_Click()
Text2.Text = tongji(Text1.Text)
End Sub
例如:11,12,13,14,15,12,13,14,15,11,15,14,11,13
统计结果如下:
结果统计如下:
〖00次〗:01,02,03,04,05,06,07,08,09,10,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,(共44个)
〖02次〗:12,(共1个)
〖03次〗:11,13,14,15,(共4个) |
-
1
评分人数
-
|