中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 多条件提取数据II 上一主题 | 下一主题
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『楼 主』:  多条件提取数据II

不好意思,我又要麻烦大家了。由于是新手上路,求助的时候比较多,请大家多见谅!

上次大家帮助我解决了同时多满足多个条件提取数据的问题,这次请大家再次帮偶一个忙:

同样是一目录下有多个文本,其中一个内容如下:
5422|542202|12310001|18500|2008-3-12|2009-3-11|安晨城
5422|0|12510101|24000|2007-3-19|2009-3-10|安永仙
5422|542202|12550101|22600|2008-1-23|2009-1-22|白通
5422|542206|12540210|39320|2008-4-10|2011-4-9|白晓筠
5422|542202|12510201|40000|2008-12-30|2010-12-29|保琴
5422|542206|12410001|30000|2008-4-29|2010-4-28|蔡必兵
5422|542202|12540210|48400|2008-2-1|2011-1-31|蔡彪
5422|542501|12540210|38500|2008-5-12|2011-5-11|蔡兵
5422|542202|12710101|30000|2008-10-21|2009-10-20|蔡光芬
5422|542204|12310001|29000|2008-12-25|2009-12-24|蔡光忠
5422|542204|12310001|29000|2008-12-25|2009-12-24|蔡娟
5422|542501|12510201|100000|2008-4-23|2010-4-22|蔡先刚
5422|542202|12510201|250000|2008-3-31|2010-3-30|蔡先涛
5422|0|12610001|0|2008-2-26|2008-2-25|曹斌
5422|0|12760001|20000|2008-5-26|2008-2-25|曹斌
5422|542202|12540210|74600|2008-1-9|2010-1-8|陈斌
现要将满足以下其中任意一个条件的该行数据提取到b.txt。(以|为分隔符)
1、第三列数据的前四位为“1231”;
2、第三列数据的前四位为“1241”;
3、第三列数据的前四位为“1254”;

求一批处理,批量将该目录下的所有文本里满足条件的数据提取出来。求
大家帮忙。

2009-2-5 12:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 2 楼』:  

无非就是那几个命令的改改就能用,经常用到为什么不自己学一学
type *.txt|findstr /r /c:".*[|].*[|]1231.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1241.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1254.*[|].*[|].*[|].*[|].*" >>b.txt
pause

   此帖被 +5 点积分      点击查看详情   
评分人:【 moniuming 分数: +5  时间:2009-2-5 13:01





有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-2-5 12:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 3 楼』:  


@echo off
Setlocal Enabledelayedexpansion
for /f "tokens=1,2,3* delims=|" %%a in ('type *.txt') do (
  set "str=%%c"
  set "var=!str:~,4!"
  if "!var!"=="1231" (
    echo %%a^|%%b^|%%c^|%%d
  ) else (
    if "!var!"=="1241" (
      echo %%a^|%%b^|%%c^|%%d
    ) else (
      if "!var!"=="1254" (echo %%a^|%%b^|%%c^|%%d)
    )
  )
)>>b.txt
start "" b.txt
[ Last edited by moniuming on 2009-2-5 at 13:00 ]

   此帖被 +8 点积分        点击查看详情   
评分人:【 yishanju 分数: +8  时间:2009-2-5 15:16


2009-2-5 12:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 4 楼』:  

感谢moniuming及yishanju兄。

不过我想的是一个文本提取后的数据生成另外一个文件名,而不是将该目录下的的所有文件合并生成一个文件。
最好是在原文件名上加一个前缀。
比如a.txt生成一个新的a.csv或a_new.txt文件。我用了>>%%~n0%.csv或等没成功,是哪里错了?

[ Last edited by hgx126 on 2009-2-6 at 22:27 ]

2009-2-6 00:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 5 楼』:  

for /r %%i in (*.txt) do (
        findstr /r /c:".*[|].*[|]1231.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1241.*[|].*[|].*[|].*[|].*" /c:".*[|].*[|]1254.*[|].*[|].*[|].*[|].*" %%i >>%%~ni.cvs
)




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-2-6 11:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 6 楼』:  

for /r %%i in (*.txt) do (
        findstr /r /c:".*|.*|1231.*|.*|.*|.*|.*" /c:".*|.*|1241.*|.*|.*|.*|.*" /c:".*|.*|1254.*|.*|.*|.*|.*" %%i >>%%~ni.cvs
)

把命令简化成这样试试看行不行,

[ Last edited by yishanju on 2009-2-6 at 11:29 ]




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-2-6 11:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 7 楼』:  

加一个for应该可以了吧,试试?
@echo off
Setlocal Enabledelayedexpansion
for %%i in (*.txt) do (
  for /f "tokens=1,2,3* delims=|" %%a in ('type "%%i"') do (
    set "str=%%c"
    set "var=!str:~,4!"
    if "!var!"=="1231" (
      >>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
    ) else (
      if "!var!"=="1241" (
        >>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
      ) else (
        if "!var!"=="1254" (
          >>"%%~ni_new.txt" echo %%a^|%%b^|%%c^|%%d
        )
      )
    )
  )
)


   此帖被 +8 点积分        点击查看详情   
评分人:【 yishanju 分数: +8  时间:2009-2-7 00:23


2009-2-7 00:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 8 楼』:  

谢谢

2009-2-9 21:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: