Board logo

标题: [文本处理] 批处理如何根据文本文档中提供的姓名和手动输入特定的日期查询对应记录? [打印本页]

作者: jshuanya    时间: 2012-6-13 13:33     标题: 批处理如何根据文本文档中提供的姓名和手动输入特定的日期查询对应记录?

一个消费记录文档412.txt:
部门编号    部门名称     人员编号      人员姓名     消费时间      消费金额     消费数量        消费模式     机器编号        机器名称        餐别        硬件机号
1008        三车间        EB0702        张杰      2012-05-02     1.5        1                    0:计次        SF0001        售饭机1        早餐          SF0001
1011        模具           XZ156        李飞        2012-05-02     1.5        1                    0:计次        SF0001        售饭机1        早餐          SF0001

人员列表.txt ,内容如下
张杰
李飞

如何根据文本文档中提供的姓名和手动输入的日期查询对应记录


前几天在网友的帮助下,整理到如下命令,
  1. for /f "delims=" %%c in (人员列表.txt) do (
  2. >>所需结果.TXT set /p =%%c <nul
  3. findstr "%%c" 412.txt >> temp.txt
  4. :AA
  5. set /p ri=只搜索日期(两位数):
  6. findstr "[0-9][0-9][0-9][0-9]-[0-9][0-9]-%ri%" temp.txt >> %%c.txt && echo 查到%%c%ri%号的消费记录 || echo 没有找到%%c%ri%日的消费记录>>%%c.txt
  7. echo 查询别的日期
  8. )
复制代码
下网那位高手帮忙写完。
需要查询的每个人日期不一样,比如说一个人要查1,2,7,8,14,17,另一个人可能要查8,15,20,21,22,25,28,31号
能否限定要输入的次数,然后结束循环,查下一个人?
为方便倒计时选择,可以加入choice语句,我从windows 2003上复制过来执行
作者: apang    时间: 2012-6-13 16:39

试试
  1. @echo off
  2. :st
  3. cls&set/p i=请输入日期(yyyy-mm-dd):
  4. for /f "delims=" %%a in (人员列表.txt) do (
  5.   setlocal enabledelayedexpansion
  6.   for /f "delims=" %%b in (412.txt) do (
  7.     for /f "tokens=4,5 delims= " %%c in ("%%b") do (
  8.       if "%%c"=="%%a" if "%%d"=="%i%" set flag=1
  9.     )
  10.   )
  11.   if "!flag!"=="1" (echo %%a 有记录) else echo %%a 无记录
  12.   endlocal
  13. )
  14. pause&goto :st
复制代码

作者: jshuanya    时间: 2012-6-13 16:46

本帖最后由 jshuanya 于 2012-6-13 16:49 编辑
试试
apang 发表于 2012-6-13 16:39


好象不行。
是查出姓名在某一天是否有消费记录,然后要查五六天

一般年份,月份都固定了,为避免重复输入,只输入号数(两位数)
实际上412.txt文件有几万条记录
人员列表也有上千条记录
作者: powerbat    时间: 2012-6-13 17:09

看样子你是要把每个人都查一遍咯?只是每个人要查询的日期不一样。
作者: apang    时间: 2012-6-13 18:29

仔细揣摩了10多分钟,硬是不明白是啥意思
理解能力有限,我放弃。。。
作者: jshuanya    时间: 2012-6-14 08:21

看样子你是要把每个人都查一遍咯?只是每个人要查询的日期不一样。
powerbat 发表于 2012-6-13 17:09



    是的。
作者: jshuanya    时间: 2012-6-14 08:23

仔细揣摩了10多分钟,硬是不明白是啥意思
理解能力有限,我放弃。。。
apang 发表于 2012-6-13 18:29



      是每个人刷卡消费,然后休息天刷卡不是免费的,统计出那个。
每个人的休息天不固定。
作者: jshuanya    时间: 2012-6-14 14:48

anybody,please?
作者: CrLf    时间: 2012-6-14 15:01

楼主手动输入不累吗...建议从文本中获取输入,比如:
list.txt
  1. 张杰 1 2 7 8 14 17
  2. 李飞 8 15 20 21 22 25 28 31
复制代码

作者: jshuanya    时间: 2012-6-14 21:28

楼主手动输入不累吗...建议从文本中获取输入,比如:
list.txt
CrLf 发表于 2012-6-14 15:01



    偶的代码已经是从一个文本中获取了。
但是还要查询每个姓名在多天有无记录,这就不知道能不能实现了。
作者: CrLf    时间: 2012-6-14 21:40

按顶楼代码改的:
  1. @echo off
  2. set /a 输入的次数=5
  3. for /f "delims=" %%c in (人员列表.txt) do (
  4.    >>所需结果.TXT set /p =%%c <nul
  5.    findstr "%%c" 412.txt >> temp.txt
  6.    setlocal enabledelayedexpansion
  7.    for /l %%a in (1 1 %输入的次数%) do set>con /p in=只搜索日期(两位数):&set "ri=!ri! [0-9][0-9][0-9][0-9]-[0-9][0-9]-!in!"
  8.    findstr "!ri!" temp.txt  && echo 查到%%c%ri%号的消费记录>con || echo 没有找到%%c%ri%日的消费记录
  9.    echo 查询别的日期>con
  10.    endlocal
  11. )>>"%%c.txt"
复制代码

作者: jshuanya    时间: 2012-6-28 09:23

按顶楼代码改的:
CrLf 发表于 2012-6-14 21:40



    这样子能实现,就是不知道搜索的是谁
还得打开列表一个个看,如果人数多一看花眼就可能出错
作者: lky216    时间: 2012-6-28 10:17

仔细揣摩了10多分钟,硬是不明白是啥意思
理解能力有限,我放弃。。。
apang 发表于 2012-6-13 18:29



    哈哈 真是的,语文不过关,嘎嘎
作者: lky216    时间: 2012-6-28 10:17

弄个SQL 好了,嘎嘎




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