Board logo

标题: [求助]关于多个文本文件的指定数据统计 [打印本页]

作者: dreamboc     时间: 2008-1-27 22:32    标题: [求助]关于多个文本文件的指定数据统计

大家好,最近工作上遇到一件麻烦事啊。问朋友说是用批处理来处理要快一些,但苦于不了解这个,因此特来此请教。
     因为快到春节了,要总结上一年的工作,而07的帐户要处理,问题如下。
有多个文件夹,命名方式如20070101一直到20071231,而每个文件夹里有一个TXT文本文件,这些文本文件都是一个名字,比如11.TXT
打开11.TXT,内容如下,最上边是文档说明,时间内别之类,然后下面就是各种产品的销量,价格,经手人,等等
                    比如 1月1日  产品销售统计表   
                              XXX公司     
部门号      操作员     产品类别     数量    价格   总金额
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
等等,每天的TXT表格式都是如此。
我想统计销售总金额和操作员的交易次数应该怎么办啊。
我刚刚接手,烦啊。
期待大家指教
如果有能解决的朋友,也请把思路告诉我,日后再碰到类似问题 ,我也好处理啊。
非常感谢
作者: suntb     时间: 2008-1-27 22:56
用for解决吧,不过我也正在学习中

期待高手,顺便学习下
作者: fastslz     时间: 2008-1-27 23:01
既然求别人帮忙,干吗不把样例贴出来
另外交易次数怎么求和?
作者: dreamboc     时间: 2008-1-27 23:25
嘿嘿,数据不带在身上啊,明天来贴。
交易次数求和就是各个交易员出现的次数啦
作者: fastslz     时间: 2008-1-27 23:34
那再说明操作员数大概多少个,总金额格式 1.11?

[ Last edited by fastslz on 2008-1-27 at 11:37 PM ]
作者: dreamboc     时间: 2008-1-28 21:53
怎么不可以上传附件呀,详细资料可以联系bluedream5566@126.com或者留个地址我发过去呀
作者: fastslz     时间: 2008-1-28 22:40
内容贴上来就可以了(10~20行)
作者: dreamboc     时间: 2008-1-28 22:52
******************************************************************************************************************************
*                                                   销售表                                                                       *
******************************************************************************************************************************
                客户帐号      产品代码         公司帐号          交易金额      交易类型         
           =============   =============   ================   ==================                    
                     0691280      012         542660              3,000.00     111
                    1610530      803         616183             20,000.00     111                                          
                    0855230      003         007598             10,000.00     111                                          
                    0211090      001         435238             20,000.00     111                                          
                    0861920      001         561694             12,000.00     111                                          
                    0747690      001         544146             20,000.00     111                                          
                    0800420      803         543999             50,000.00     111                                          
                    0385610      803         266971             10,000.00     111                                          
                    1039860      803         050714             20,000.00     111                                          
                    0956590      005         564250             10,000.00     111
作者: fastslz     时间: 2008-1-28 23:25
这样恐怕有点麻烦,客户帐号很多怕变量不够用,也没这方面经验
看看其他会员有更好办法么~
作者: Rulition     时间: 2008-1-28 23:38
可考虑用 DOS 结合 XLS (或 SQL) 来完成,思路如下:

1)既然"帐户有多个文件夹,命名方式如20070101一直到20071231,且每个文件夹里有一个TXT文本文件,这些文本文件都是一个名字,比如11.TXT"
那么就能用 DOS 中的 FOR 和 COPY 合并这些 11.TXT 到一个文件中.

2)对上一步生成的文件,使用 DOS 中的 SORT 进行排序,只取以下部分:
0691280      012         542660              3,000.00     111
再对这些有规律的部分加上列名:
客户帐号      产品代码         公司帐号          交易金额      交易类型
形成下面的文本:
客户帐号      产品代码         公司帐号          交易金额      交易类型
0691280      012         542660              3,000.00     111
1610530      803         616183             20,000.00     111

3)将上面的内容导入到EXCEL中,
使用"分类汇总"操作,就能得到"操作员的交易次数"
使用"列汇总"操作,就能得到"销售总金额"

*将(2)的内容导入到SQL表中,也可得到结果.
作者: junchen2     时间: 2008-1-28 23:39
具体达到什么要求,结果形式发上来我可以帮你。谢谢!
作者: dreamboc     时间: 2008-1-28 23:51
只要累积金额就够了,不用考虑客户帐号的
作者: dreamboc     时间: 2008-1-28 23:58
数据马上传给你,谢谢啦
作者: 3742668     时间: 2008-1-29 00:19


  Quote:
Originally posted by fastslz at 2008-1-28 23:25:
这样恐怕有点麻烦,客户帐号很多怕变量不够用,也没这方面经验
看看其他会员有更好办法么~

最简单的就是利用临时变量了。
先用for读取每个文本然后把交易金额echo>>到以操作员为名的文本文件中,最后再分别统计,例如有test.txt内容如下:

  Quote:
                     0691280      012         542660              3,000.00     111
                    1610530      803         616183             20,000.00     111                                          
                    0855230      003         007598             10,000.00     111                                          
                    0211090      001         435238             20,000.00     111                                          
                    0861920      001         561694             12,000.00     111                                          
                    0747690      001         544146             20,000.00     111                                          
                    0800420      803         543999             50,000.00     111                                          
                    0385610      803         266971             10,000.00     111                                          
                    1039860      803         050714             20,000.00     111                                          
                    0956590      005         564250             10,000.00     111


@echo off
    md tmp
    for /f "tokens=1,4" %%i in (test.txt) do echo %%j>>tmp\%%i.txt
    for %%i in (tmp\*.txt) do call :Sub %%i
    rd /s /q tmp
    pause
goto :eof

:Sub
    set /a num = 0
    for /f %%i in (%1) do set /a num += %%i 2>nul
    echo %1的总金额为:%num%000
    echo %1的交易次数为:
    find /c /v "" %1
    echo.
    echo.
    echo.
goto :eof
需要注意的是,如果test.txt中包含有标题行需要在for语句中使用skip开关,另外根据具体的要求也应该作相应的改变,包括显示的格式,数据文件的格式,以及增加遍历所有数据文件的语句,另外还要注意批处理最头疼的特殊字符问题.
   就这个问题来说,如果数据文件不多,可以尝试用Excel来解决,如果数据多的话,可以尝试用vbs来解决.相信它们比起批处理起来应该会快捷准确一些.

  Quote:
『第 12 楼』:  

只要累积金额就够了,不用考虑客户帐号的  

如果要求这么低的话,那么把for命令多学习一下,应该会很轻松地解决。
作者: zh159     时间: 2008-1-29 00:24
试试这个,用Excel打开list.csv后期处理
@echo off
>list.csv echo "客户帐号","产品代码","公司帐号","交易金额","交易类型"
for /f "delims=" %%f in ('dir/on/s *.txt') do (
  echo %%f
  for /f "tokens=1,2,3,4,5" %%i in ('findstr /v "* =" "%%f"^|findstr "[0-9]"') do (
    echo %%i  %%j  %%k  %%l  %%m
    >>list.csv echo "%%i","%%j","%%k","%%l","%%m"
  )
)
pause
因为要排除标题,所以用了两次findstr,效率稍慢
作者: fastslz     时间: 2008-1-29 00:25
我收了附件看了下,部分格式CMD下无法正确分隔,所以处理好的数据怕有误差,这样交不了差反被老板骂。
单求交易金额还是交给 Excel
作者: dreamboc     时间: 2008-1-29 23:11
好的呀,再想别的办法啦
作者: junchen2     时间: 2008-1-30 00:45
http://www.vkill.net/tools.html先下载一个gawk工具,我等一下把代码发给你。
作者: junchen2     时间: 2008-1-30 00:49
累积金额结果放在那里,谢谢!
gawk.exe改为awk.exe

[ Last edited by junchen2 on 2008-1-30 at 02:46 AM ]
作者: dreamboc     时间: 2008-2-3 20:54
活活,也谢谢楼上的,嘻嘻
作者: dreamboc     时间: 2008-2-3 20:55
领导要求经常变啊,麻烦论坛的朋友了。
这一次的需求到今天中止啦,活活
祝所有朋友新年快乐
作者: fastslz     时间: 2008-2-3 21:31
其实楼主这个数据文件类似于POS机生存的数据,当POS断电或者重启后某天的数据统计格式会有变动

  Quote:
                              XXX公司     
部门号      操作员     产品类别     数量    价格   总金额
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
                              XXX公司
1122   5566   888   9999 98989   
部门号      操作员     产品类别     数量    价格   总金额
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。
。。           。。       。。              。。  。。     。。

这样的话处理的数据就会有误差,我在你的附件里正好看到这样一个统计表单,而for也只能以skip条过前几行,以空格作分隔符。所以自己把握下啦,拿了个有误差的结果汇报老板自己心里有个底,不然...。
用15楼zh159 兄的Excel处理方式直观点

[ Last edited by fastslz on 2008-2-3 at 09:33 PM ]