| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1325 人关注过本帖
标题:求助vbs读取文本文档数据问题,在线等
只看楼主 加入收藏
habiaosuo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-11-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
求助vbs读取文本文档数据问题,在线等
文本文档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分,全部贡献,多谢了
搜索更多相关主题的帖子: 在线 
2012-11-30 15:23
habiaosuo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-11-30
收藏
得分:0 
急需实现这段程序,本人能力有限,恳请各位大侠帮忙,无限感激
2012-11-30 15:39
habiaosuo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-11-30
收藏
得分:0 
共有 13 人关注过本帖

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

授人于鱼,不如授人于渔
早已停用QQ了
2012-11-30 21:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
没注意看你是 有数据库的,那个更简单。

按你的方法把数据加入 数据库里,然后输出时,用 SQL 的分类求和的办法 输出就是了。

授人于鱼,不如授人于渔
早已停用QQ了
2012-11-30 21:48
habiaosuo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-11-30
收藏
得分:0 
首先谢谢版主
这个是没有数据库的,就是从1.txt里面读取数据,然后输出到2.txt
本人还是个菜鸟阶段
上面的程序也是从网上找的,然后稍作修改
恳请版主,能否给出实现的具体语句
万分感谢
2012-11-30 22:16
habiaosuo
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-11-30
收藏
得分:0 
跪求楼主,再次出手啊。。。。。。
2012-11-30 23:02
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
程序代码:

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

授人于鱼,不如授人于渔
早已停用QQ了
2012-12-01 09:35
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
比较奇怪的时,写 VAL 就报错,写 CLNG 就可以。

授人于鱼,不如授人于渔
早已停用QQ了
2012-12-01 09:36
快速回复:求助vbs读取文本文档数据问题,在线等
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019014 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved