| 
 
dreamboc 
初级用户
 
  
 
  
  
积分 20 
发帖 9 
注册 2008-1-27 
状态 离线
 | 
『楼 主』:
 [求助]关于多个文本文件的指定数据统计
 
使用 LLM 解释/回答一下
  
大家好,最近工作上遇到一件麻烦事啊。问朋友说是用批处理来处理要快一些,但苦于不了解这个,因此特来此请教。 
     因为快到春节了,要总结上一年的工作,而07的帐户要处理,问题如下。 
有多个文件夹,命名方式如20070101一直到20071231,而每个文件夹里有一个TXT文本文件,这些文本文件都是一个名字,比如11.TXT 
打开11.TXT,内容如下,最上边是文档说明,时间内别之类,然后下面就是各种产品的销量,价格,经手人,等等 
                    比如 1月1日  产品销售统计表    
                              XXX公司      
部门号      操作员     产品类别     数量    价格   总金额 
。。           。。       。。              。。  。。     。。 
。。           。。       。。              。。  。。     。。 
。。           。。       。。              。。  。。     。。 
。。           。。       。。              。。  。。     。。 
。。           。。       。。              。。  。。     。。 
等等,每天的TXT表格式都是如此。 
我想统计销售总金额和操作员的交易次数应该怎么办啊。 
我刚刚接手,烦啊。 
期待大家指教 
如果有能解决的朋友,也请把思路告诉我,日后再碰到类似问题 ,我也好处理啊。 
非常感谢 
 
    
 
  
 |   
 | 
  2008-1-27 22:32 | 
  
 | 
 | 
 
suntb 
高级用户
 
    
 
  
  
积分 581 
发帖 277 
注册 2006-12-23 
状态 离线
 | 
 | 
  2008-1-27 22:56 | 
  
 | 
 | 
 
fastslz 
铂金会员
 
        DOS一根葱
  
 
积分 5493 
发帖 2315 
注册 2006-5-1 来自 上海 
状态 离线
 | 
 | 
  2008-1-27 23:01 | 
  
 | 
 | 
 
dreamboc 
初级用户
 
  
 
  
  
积分 20 
发帖 9 
注册 2008-1-27 
状态 离线
 | 
 | 
  2008-1-27 23:25 | 
  
 | 
 | 
 
fastslz 
铂金会员
 
        DOS一根葱
  
 
积分 5493 
发帖 2315 
注册 2006-5-1 来自 上海 
状态 离线
 | 
 | 
  2008-1-27 23:34 | 
  
 | 
 | 
 
dreamboc 
初级用户
 
  
 
  
  
积分 20 
发帖 9 
注册 2008-1-27 
状态 离线
 | 
 | 
  2008-1-28 21:53 | 
  
 | 
 | 
 
fastslz 
铂金会员
 
        DOS一根葱
  
 
积分 5493 
发帖 2315 
注册 2006-5-1 来自 上海 
状态 离线
 | 
 | 
  2008-1-28 22:40 | 
  
 | 
 | 
 
dreamboc 
初级用户
 
  
 
  
  
积分 20 
发帖 9 
注册 2008-1-27 
状态 离线
 | 
『第 8 楼』:
 
 
使用 LLM 解释/回答一下
  
****************************************************************************************************************************** 
*                                                   销售表                                                                       *  
****************************************************************************************************************************** 
                客户帐号      产品代码         公司帐号          交易金额      交易类型          
           =============   =============   ================   ==================                     
                     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 
 
    
 
  
 |   
 | 
  2008-1-28 22:52 | 
  
 | 
 | 
 
fastslz 
铂金会员
 
        DOS一根葱
  
 
积分 5493 
发帖 2315 
注册 2006-5-1 来自 上海 
状态 离线
 | 
 | 
  2008-1-28 23:25 | 
  
 | 
 | 
 
Rulition 
初级用户
 
  
 
  
  
积分 26 
发帖 11 
注册 2008-1-27 
状态 离线
 | 
『第 10 楼』:
 
 
使用 LLM 解释/回答一下
  
可考虑用 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表中,也可得到结果. 
 
    
 
  
 |   
 | 
  2008-1-28 23:38 | 
  
 | 
 | 
 
junchen2 
高级用户
 
    
 
  
  
积分 537 
发帖 219 
注册 2007-8-4 来自 杭州--半山 
状态 离线
 | 
 | 
  2008-1-28 23:39 | 
  
 | 
 | 
 
dreamboc 
初级用户
 
  
 
  
  
积分 20 
发帖 9 
注册 2008-1-27 
状态 离线
 | 
 | 
  2008-1-28 23:51 | 
  
 | 
 | 
 
dreamboc 
初级用户
 
  
 
  
  
积分 20 
发帖 9 
注册 2008-1-27 
状态 离线
 | 
 | 
  2008-1-28 23:58 | 
  
 | 
 | 
 
3742668 
荣誉版主
 
       
 
  
  
积分 2013 
发帖 718 
注册 2006-2-18 
状态 离线
 | 
『第 14 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by fastslz at 2008-1-28 23:25: 
这样恐怕有点麻烦,客户帐号很多怕变量不够用,也没这方面经验 
看看其他会员有更好办法么~  
最简单的就是利用临时变量了。 
先用for读取每个文本然后把交易金额echo>>到以操作员为名的文本文件中,最后再分别统计,例如有test.txt内容如下:
                      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来解决.相信它们比起批处理起来应该会快捷准确一些.
 『第 12 楼』:   
 
只要累积金额就够了,不用考虑客户帐号的   
 
如果要求这么低的话,那么把for命令多学习一下,应该会很轻松地解决。  
 
    
 
  
 |   
 | 
  2008-1-29 00:19 | 
  
 | 
 | 
 
zh159 
金牌会员
 
      
 
  
 
积分 3687 
发帖 1467 
注册 2005-8-8 
状态 离线
 | 
『第 15 楼』:
 
 
使用 LLM 解释/回答一下
  
试试这个,用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 ""') do ( 
    echo %%i  %%j  %%k  %%l  %%m 
    >>list.csv echo "%%i","%%j","%%k","%%l","%%m" 
  ) 
) 
pause
 
因为要排除标题,所以用了两次findstr,效率稍慢  
 
    
 
  
  |  
                  
  
                      |   
 | 
  2008-1-29 00:24 | 
  
 |