Board logo

标题: [文本处理] 进行数据统计的批处理为何出错? [打印本页]

作者: haomei0920    时间: 2010-11-15 17:13     标题: 进行数据统计的批处理为何出错?

目的进行数据统计功能。
具体描述:
1.有2个文件,文件1是东西的名称和价格,例如
钢笔,5
铅笔,2
纸(包),10
文件2是东西的数量:
钢笔,8
铅笔,10
粉笔,7
2.实现结果是统计有数量的东西的数量,单价,总价和所有东西的总价格并统计没有价格的东西。
程序执行结果是生成文件3,文件3的内容是:

钢笔,8,5,40
铅笔,10,2,20
总价:60
----------------------
没有价格的东西:
粉笔,7
作者: haomei0920    时间: 2010-11-15 17:13

一会附上我自己的代码。
作者: haomei0920    时间: 2010-11-15 17:45

@echo off
for /f "tokens=1,2 delims=," %%i in (1.txt) do for /f "tokens=1,2 delims=," %%k in (2.txt) do (
if %%i==%%k set /a valu=%%j*%%l echo %%k,%%l,%j,%valu%>>3.txt )
for /f "tokens=3 delims=," %%a in (3.txt) do set /a num+=%%a echo 总价:%num%>>3.txt
@echo. >>3.txt
@echo off
for /f "tokens=1,2 delims=," %%i in (2.txt) do (
find "%%i" 1.txt
if errorlevel=1 (
echo ................................................>>3.txt
echo 下面是没有价格的东西:>>3.txt
echo %%i,%%j >>3.txt
)
)
这是我的代码,只能实现没有价格的能统计出来,有价格的不能实现,请各位高手给看看。
作者: hfg1977    时间: 2010-11-15 18:04

中文逗号与英文逗号都分不清
作者: haomei0920    时间: 2010-11-15 18:16

逗号都改成英文的,但是执行的时候提示:运算符不存在 是什么意思。搞不定了。
作者: haomei0920    时间: 2010-11-15 18:24

@echo off
for /f "tokens=1,2 delims=," %%i in (1.txt) do for /f "tokens=1,2 delims=," %%k in

(2.txt) do (if %%i==%%k set valu=%%j*%%l echo %%k,%%l,%%j,%valu%>>3.txt )
for /f "tokens=4 delims=," %%a in (3.txt) do set num+=%%a echo 总价:%num%>>3.txt
@echo. >>3.txt
@echo off
for /f "tokens=1,2 delims=," %%i in (2.txt) do (
find "%%i" 1.txt
if errorlevel=1 (
echo ................................................>>3.txt
echo 下面是没有价格的东西:>>3.txt
echo %%i,%%j >>3.txt
)
)
代码修改了一下,没有结果,只有一个结果:
................................................
下面是没有价格的东西:
粉笔,7
其他的统计都是空的。不显示。
作者: hfg1977    时间: 2010-11-15 18:38

给楼主解决问题了, 测试通过
  1. (
  2. @echo off
  3. for /f "tokens=1,2 delims=," %%a in (1.txt) do set val_%%a=%%b
  4. for /f "tokens=1,2 delims=," %%a in (2.txt) do (
  5. if defined val_%%a (
  6. call set/a sum_=%%b "*" %%val_%%a%%
  7. call set/a sumAll+=%%sum_%%
  8. call echo %%a, %%b, %%val_%%a%%, %%sum_%%
  9. ) else (
  10. set No_%%a=%%a, %%b
  11. ))
  12. echo.
  13. call echo 总价: %%sumAll%%
  14. echo ................................................
  15. echo 下面是没有价格的东西:
  16. for /f "tokens=2 delims==" %%a in ('set No_') do echo %%a
  17. )>>3.txt
复制代码

作者: yangfengoo    时间: 2010-11-15 18:42

计算用set/a
作者: hfg1977    时间: 2010-11-15 18:55

re: 当然了  
作者: haomei0920    时间: 2010-11-15 21:20     标题: 回复 7楼 的帖子

谢谢,兄弟,但是好像计算总价格的时候不对。
作者: haomei0920    时间: 2010-11-15 21:55

@echo off
for /f "tokens=1,2 delims=," %%i in (1.txt) do for /f "tokens=1,2 delims=," %%k in (2.txt) do (if %%i==%%k set /a valu=%%j*%%l echo %%k,%%l,%%j,%valu%>>3.txt)
for /f "tokens=4 delims=," %%a in (3.txt) do set /a num+=%%a echo 总价:%num%>>3.txt
@echo. >>3.txt
@echo off
for /f "tokens=1,2 delims=," %%i in (2.txt) do (
find "%%i" 1.txt
if errorlevel=1 (
echo ................................................>>3.txt
echo 下面是没有价格的东西:>>3.txt
echo %%i,%%j >>3.txt
)
)
这是经过修改的源码,运行提示运算符不存在是啥意思?哪位兄弟给解释一下,我看是乘法运算的问题,但是又不知道是什么回事。
作者: lys5300    时间: 2010-11-15 23:03     标题: 我试过 可以打到你要的想法 理应鼓励一下 (*^__^*) 嘻嘻……

  1. @echo off&setlocal enabledelayedexpansion
  2. set/a c1=0
  3. set/a c2=0
  4. for /f "delims=, tokens=1,2" %%i in (文件1.txt) do (
  5. set/a c1+=1
  6. for /f "delims=, tokens=2" %%a in (文件2.txt) do (
  7. set/a c2+=1
  8. if "!c1!"=="!c2!" call :use %%i %%j %%a
  9. )
  10. set/a c2=0
  11. )
  12. echo 总价:%sum1%>>文件3.txt
  13. echo 完成
  14. pause
  15. exit
  16. :use
  17. set/a sum=%2*%3
  18. echo %1,%2,%3,!sum!>>文件3.txt
  19. set/a sum1=sum+sum1
复制代码

[ 本帖最后由 lys5300 于 2010-11-15 23:15 编辑 ]
作者: haomei0920    时间: 2010-11-16 18:42     标题: 回复 12楼 的帖子

兄弟呀,我都想死了。执行后文件3的内容就2个字:总价: 就没有了。
作者: haomei0920    时间: 2010-11-16 18:43

我的代码是取不到两个参数的乘积。崩溃呀!
作者: lys5300    时间: 2010-11-16 18:45     标题: 回复 13楼 的帖子

可以啊  我试了好几遍了   还有 分隔符是中文的哦  别混淆了。
作者: haomei0920    时间: 2010-11-16 19:34

对不住各位兄弟了。是分隔符的问题。我该死。
作者: haomei0920    时间: 2010-11-16 19:36     标题: 回复 15楼 的帖子

今天没分了。有分的时候一定给你。
作者: 随风    时间: 2010-11-16 19:43

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=,," %%a in (1.txt) do set %%a=%%b
  3. for /f "tokens=1* delims=,," %%a in (2.txt) do (
  4.    if not defined %%a (>>没有价格的东西.txt echo;%%a,!%%a!) else (
  5.       set /a n=%%b*!%%a!
  6.       >>3.txt echo %%a,%%b,!%%a!,!n!
  7.     )
  8. )
  9. start 3.txt
  10. start 没有价格的东西.txt
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2