注册 登录
编程论坛 VB6论坛

求助vbs读取文本文档数据问题,在线等

habiaosuo 发布于 2012-11-30 15:23, 1325 次点击
文本文档1.txt原始数据格式如下
aa 张三 bb cc dd 1
aa 张三 bb cc dd 2
aa 张三 bb cc dd 3
aa 李四 bb cc dd 2
aa 李四 bb cc dd 3

目前程序
Const adVarChar = 200
Const MaxCharacters = 255
Const ForReading = 1
Const ForWriting = 2
Set DataList = CreateObject("ADOR.Recordset")
DataList.Fields.Append "line", adVarChar, MaxCharacters
DataList.Open
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("E:\1.txt", ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
str_arr=Split (strLine," ")
For i=0 to ubound(str_arr)
strLine1=str_arr(i)
next
strLine2=str_arr(1)&" "&str_arr(5)
DataList.AddNew
DataList("line") = strLine2
DataList.Update
Loop
objFile.Close
DataList.Sort = "line"
DataList.MoveFirst
Do Until DataList.EOF
strText = strText & DataList.Fields.Item("line") & vbCrLf
DataList.MoveNext
Loop
Set objFile = objFSO.OpenTextFile("E:\2.txt", ForWriting)
objFile.WriteLine strText
objFile.Close

能实现结果如下

李四 2
李四 3
张三 1
张三 2
张三 3

理想状态是想要实现汇总
即: 李四 5   (2+3)
     张三 6    (1+2+3)
恳请各位大侠帮助,无比感谢,在线等结果
我只有20分,全部贡献,多谢了
9 回复
#2
habiaosuo2012-11-30 15:39
急需实现这段程序,本人能力有限,恳请各位大侠帮忙,无限感激
#3
habiaosuo2012-11-30 15:55
共有 13 人关注过本帖

谢谢各位大侠
#4
habiaosuo2012-11-30 16:03
自己顶,别沉了
等待各位大侠出招
#5
风吹过b2012-11-30 21:46
有两种处理方法:
一、多用CPU时间的方法:
建立两个动态数组,二个变量。建立后,数组元素初始定义一个值,如 10 。二个变量有一个负责标记数组大小,另一个负责记录使用了多少的。
1、读一行,然后把 名字与第一个数组中用过了元素比较
   如果不存在,那么,找到下一个未使用的元素,保存进去,把值写在第二数组的相应下标里。
     如果所有的元素都 使用了,那么使用 redim Preserve 重定义两个数组,每次重新定义时,都分别增加一定的数量,如5.同时记录最大值。
   如果存在,那么在第二个数组对应下标中累加数量。
分析,这种方法里,CPU 的时间主要花在 重定义数组大并且保留原数据的过程中。为了平衡,需要多次测试,以取得内存占用和CPU时间的平衡。
建议使用这种方法
2、二遍读取法。
首先读一遍,计算有多少行。然后重定义数组,再读第二遍,把所有的数据都读入内存。
然后再遍类整个数组,计算每个名字是否有相同的,找到一个,就把数据累计到该名字的第一个中,并且把找到的这个清空。
最后输出时,只输出不为空的数据。
分析,这种方法里,时间主要消耗在读写磁盘里,并且占用内存比第一种方法要大。中到大数据量时速度应该比第一种要快,超大数据时容易因为内存占用过多而导致性能下降。不推荐使用这种方法,除非你确保数据很小,在1千行以内。。
#6
风吹过b2012-11-30 21:48
没注意看你是 有数据库的,那个更简单。

按你的方法把数据加入 数据库里,然后输出时,用 SQL 的分类求和的办法 输出就是了。
#7
habiaosuo2012-11-30 22:16
首先谢谢版主
这个是没有数据库的,就是从1.txt里面读取数据,然后输出到2.txt
本人还是个菜鸟阶段
上面的程序也是从网上找的,然后稍作修改
恳请版主,能否给出实现的具体语句
万分感谢
#8
habiaosuo2012-11-30 23:02
跪求楼主,再次出手啊。。。。。。
#9
风吹过b2012-12-01 09:35
程序代码:


redim xm(10)
redim js(10)
j1=0
j2=10

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("e:\1.txt", 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
str_arr=Split (strLine," ")

  for j=1 to j1
     if xm(j)=str_arr(1) then         '(0)= aa,(1)=张三,(5)=1
        js(j)=js(j)+clng(str_arr(5))
        exit for
     end if
  next

  if j>j1 then
     if j>j2 then
        j2=j2+5
        redim Preserve xm(j2)
        redim Preserve js(j2)
     end if

     j1=j1+1
     xm(j)=str_arr(1)
     js(j)=clng(str_arr(5))
  end if

loop

objfile.close

Set objFile = objFSO.CreateTextFile("e:\2.txt", True)
for j=1 to j1
   objFile.WriteLine xm(j) & " " & js(j)
next
objfile.close
#10
风吹过b2012-12-01 09:36
比较奇怪的时,写 VAL 就报错,写 CLNG 就可以。
1